web-dev-qa-db-fra.com

Comment ajouter du texte à la fin de chaque ligne sous unix

Je suis en train de faire certaines opérations de traitement de texte et enfin en mesure d'obtenir un fichier de ce type

india
sudan
japan
france

maintenant je veux ajouter un commentaire dans le fichier ci-dessus, comme dans le fichier final, il devrait être quelque chose comme

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

comme un même commentaire sur tout le fichier. Comment puis-je faire cela?

29
user2647888

Il y a plusieurs façons:

sed: remplacer $ (fin de ligne) avec le texte donné.

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

awk: affiche la ligne plus le texte donné.

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

Enfin, dans pure bash: lisez ligne par ligne et imprimez-la avec le texte donné. Notez que ceci est déconseillé comme expliqué dans Pourquoi utiliser une boucle Shell pour traiter du texte est-il considéré comme une mauvaise pratique?

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

Pour une approche plus obscure:

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

Vous pouvez également utiliser xargs avec echo pour cela:

< file xargs -d "\n" -rI % echo '% | COUNTRY'

Ceci fera que xargs prendra chaque ligne de file et la transmettra une à la fois † à la commande spécifiée echo en remplaçant le % (ou le caractère de votre choix) avec la ligne de saisie.

† Par défaut, xargs transmettra plusieurs lignes d'entrée à une seule commande, en les ajoutant toutes à sa liste d'arguments. Mais en spécifiant -I % fait que xargs place l'entrée à l'emplacement spécifié dans la commande et n'y met qu'une ligne à la fois, exécutant echo autant de fois que nécessaire.

3
Smylers

Un autre awk

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