una texto reemplazar lineas linea leer fichero eliminar caracter añadir agregar shell unix awk ksh

shell - reemplazar - Cómo agregar texto al final de cada línea en Unix



sed reemplazar/ (4)

Estoy haciendo ciertas operaciones de procesamiento de texto y finalmente puedo obtener un archivo como este

india sudan japan france

ahora quiero agregar un comentario en el archivo anterior, como en el archivo final, debería ser algo así como

india | COUNTRY sudan | COUNTRY japan | COUNTRY france | COUNTRY

como un mismo comentario en todo el archivo. ¿Cómo hago esto?


Hay muchas maneras:

sed : reemplaza $ (fin de línea) con el texto dado.

$ sed ''s/$/ | COUNTRY/'' file india | COUNTRY sudan | COUNTRY japan | COUNTRY france | COUNTRY

awk : imprime la línea más el texto dado.

$ awk ''{print $0, "| COUNTRY"}'' file india | COUNTRY sudan | COUNTRY japan | COUNTRY france | COUNTRY

Finalmente, en pure bash : lea línea por línea e imprímala junto con el texto dado. Tenga en cuenta que esto se desaconseja como se explica en ¿Por qué usar un bucle de shell para procesar texto se considera una mala práctica?

$ while IFS= read -r line; do echo "$line | COUNTRY"; done < file india | COUNTRY sudan | COUNTRY japan | COUNTRY france | COUNTRY


Otro awk

awk ''$0=$0" | COUNTRY"'' file


Para un enfoque más ofuscado:

yes ''| COUNTRY'' | sed $(wc -l < file)q | paste -d '' '' file -


También puede usar xargs con echo para esto:

xargs -d "/n" -rI % echo ''% | COUNTRY''

Esto hará que xargs tome cada línea de entrada y la pase de a una por vez † al comando echo especificado, reemplazando el % (o el carácter que elijas) con la línea de entrada.

† De manera predeterminada, xargs pasará varias líneas de entrada a un solo comando y las agregará a su lista de argumentos. Pero al especificar -I % hace que xargs coloque la entrada en el lugar especificado en el comando, y solo coloque una línea a la vez, ejecutando echo tantas veces como sea necesario.