99 votes

Comment obtenir le dernier mot de chaque ligne avec bash ?

Par exemple, j'ai un fichier :

$ cat file

i am the first example.

i am the second line.

i do a question about a file.

et j'en ai besoin :

example, line, file

j'ai l'intention avec "awk" mais le problème est que les mots sont dans un espace différent

8voto

abasu Points 1564

Il y a de nombreuses façons de procéder. comme awk les solutions montrent, c'est la solution propre

La solution sed consiste à supprimer tout ce qui se trouve jusqu'au dernier espace. Donc, s'il n'y a pas d'espace à la fin, cela devrait fonctionner.

sed 's/.* //g' <file>

vous pouvez éviter sed également et aller pour un while boucle.

while read line
do [ -z "$line" ] && continue ;
echo $line|rev|cut -f1 -d' '|rev
done < file

il lit une ligne, la révère, coupe la première (c'est-à-dire la dernière dans l'original) et la rétablit

la même chose peut être faite d'une manière purement bash

while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file

c'est ce qu'on appelle l'expansion des paramètres

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X