shell - script - sed sustituir caracteres especiales




Cómo agregar 100 espacios al final de cada línea de un archivo en Unix (5)

Con awk

awk '{printf "%s%100s\n", $0, ""}' file.dat

$0 refiere a toda la línea.

Tengo un archivo que se supone que contiene 200 caracteres en cada línea. Recibí un archivo fuente con solo 100 caracteres en cada línea. Necesito agregar 100 espacios en blanco adicionales a cada línea ahora. Si hubiera pocos espacios en blanco, podríamos haber usado sed como:

 sed 's/$/     /' filename > newfilename

Dado que son 100 espacios, ¿alguien puede decirme si es posible agregarlo a Unix?


En caso de que estés buscando una solución bash ,

while IFS=  read -r line
    do
    printf "%s%100s\n" "$line" 
done < file > newfile

Prueba

Digamos que tengo un archivo con 3 líneas, como

$ wc -c file
      16 file
$ wc -c newfile
     316 newfile

Respuesta original

spaces=$(echo {1..101} | tr -d 0-9)
while read line
    do
    echo -e "${line}${spaces}\n" >> newfile
done < file

Puedes usar printf en awk :

awk '{printf "%s%*.s\n", $0, 100, " "}' filename > newfile

Este printf agregará 100 espacios al final de cada nueva línea.


Si desea tener n caracteres fijos por línea (no confíe en que el archivo de entrada tenga m caracteres exactos por línea) siga esto. Para el archivo de entrada con número variable de caracteres por línea:

$ cat file
1
12
123
1234
12345

extender a 10 caracteres por línea.

$ awk '{printf "%-10s\n", $0}' file | cat -e

1         $
12        $
123       $
1234      $
12345     $

Obviamente cambia de 10 a 200 en tu script. Aquí $ muestra el final de la línea, no está allí como un personaje. No necesita cat -e , aquí solo para mostrar que la línea está extendida.


Actualizado después de la sugerencia de Glenn

De alguna manera, como Glenn sugiere en los comentarios, la sustitución es innecesaria, puede agregar los espacios, aunque, siguiendo esa lógica aún más, ni siquiera necesita la suma, puede say después de la línea original.

perl -nlE 'say $_," "x100' file

Respuesta original

Con Perl:

perl -pe 's/$/" " x 100/e' file

Eso dice ... "Sustituir ( s ) el final de cada línea ( $ ) con la expresión calculada ( e ) de 100 repeticiones de un espacio" .

Si quisiera rellenar todas las líneas, por ejemplo, con 200 caracteres, incluso si el archivo de entrada estaba deshilachado (todas las líneas de diferente duración), podría usar algo como esto:

perl -pe '$pad=200-length;s/$/" " x $pad/e'

que formaría líneas de 83, 102 y 197 caracteres a 200 cada uno.





awk