renombrar renombrado nombre muchos masivo masiva lista forma copiar como cambiar buscar archivos archivo linux shell csv sed awk

renombrado - renombrar lista de archivos linux



Reemplazar espacios en blanco con una coma en un archivo de texto en Linux (7)

Necesito editar algunos archivos de texto (una salida de sar ) y convertirlos en archivos CSV.

Necesito cambiar cada espacio en blanco (tal vez es una pestaña entre los números en la salida) usando funciones sed o awk (un script de shell fácil en Linux).

¿Alguien puede ayudarme? Cada comando que utilicé no cambió el archivo en absoluto; gsub .


¿Qué tal algo así?

cat texte.txt | sed -e ''s//s/,/g'' > texte-new.txt

(Sí, con algunos catting inútiles y tuberías, también podría usar <para leer directamente del archivo, supongo - usé cat primero para generar el contenido del archivo, y solo después, agregué sed a mi línea de comandos)

EDITAR: como @ ghostdog74 señaló en un comentario, definitivamente no hay necesidad de thet cat / pipe; puedes dar el nombre del archivo a sed:

sed -e ''s//s/,/g'' texte.txt > texte-new.txt

Si "texte.txt" es de esta manera:

$ cat texte.txt this is a text in which I want to replace spaces by commas

Obtendrás un "texte-new.txt" que se verá así:

$ cat texte-new.txt this,is,a,text in,which,I,want,to,replace spaces,by,commas

No iría simplemente reemplazando el archivo anterior por el nuevo (podría hacerse con sed -i, si no recuerdo mal, y como dijo @ ghostdog74, este aceptaría crear la copia de seguridad sobre la marcha) : mantener podría ser sabio , como una medida de seguridad (incluso si eso significa tener que cambiarle el nombre a algo así como "texte-backup.txt")


Aquí hay un script de Perl que editará los archivos in situ:

perl -i.bak -lpe ''s//s+/,/g'' files*

El espacio en blanco consecutivo se convierte en una coma simple.
Cada archivo de entrada se mueve a .bak

Estas opciones de línea de comando se usan:

  • -i.bak editar en el lugar y hacer copias .bak

  • -p bucle alrededor de cada línea del archivo de entrada, imprima automáticamente la línea

  • -l elimina las nuevas líneas antes del procesamiento y las agrega de nuevo en adelante

  • -e ejecuta el código perl


Este comando debería funcionar:

sed "s//s/,/g" < infile.txt > outfile.txt

Tenga en cuenta que debe redirigir la salida a un nuevo archivo. El archivo de entrada no se cambia en su lugar.


Pruebe algo como:

sed ''s/[:space:]+/,/g'' orig.txt > modified.txt

La clase de caracteres [: espacio:] coincidirá con todos los espacios en blanco (espacios, pestañas, etc.). Si solo quieres reemplazar un solo caracter, ej. solo espacio, use eso solo.

EDITAR: En realidad [: espacio:] incluye retorno de carro, por lo que puede que no haga lo que usted desea. Lo siguiente reemplazará pestañas y espacios.

sed ''s/[:blank:]+/,/g'' orig.txt > modified.txt

como lo hará

sed ''s/[/t ]+/,/g'' orig.txt > modified.txt

En todo esto, debe tener cuidado de que los elementos del archivo que están separados por espacios en blanco no contengan sus propios espacios en blanco que desee conservar, por ejemplo. dos palabras.


sed puede hacer esto:

sed ''s/[/t ]/,/g'' input.file

Eso se enviará a la consola,

sed -i ''s/[/t ]/,/g'' input.file

editará el archivo en el lugar


sin mirar su archivo de entrada, solo una conjetura

awk ''{$1=$1}1'' OFS=","

redirigir a otro archivo y cambiar el nombre según sea necesario


tr '' '' '','' <input >output

Sustituye cada espacio con una coma, si lo necesita, puede hacer un pase con el indicador -s (repeticiones de squeeze), que reemplaza cada secuencia de entrada de un carácter repetido que se enumera en SET1 (el espacio en blanco) con una sola aparición de ese personaje.

Uso de repeticiones de compresión usadas después de pestañas de sustitución:

tr -s ''/t'' <input | tr ''/t'' '','' >output