web-dev-qa-db-fra.com

Comment afficher le premier mot de chaque ligne de mon fichier en utilisant les commandes linux?

J'ai un fichier contenant plusieurs lignes et je souhaite afficher uniquement le premier mot de chaque ligne avec les commandes Linux.

Comment puis je faire ça?

20
MOHAMED

Essayez de faire cela avec grep :

grep -Eo '^[^ ]+' file
33
Gilles Quenot

Vous pouvez utiliser awk:

awk '{print $1}' your_file

Ceci "imprimera" la première colonne ($1) dans your_file.

32
newfurniturey

essayez de faire ceci avec coreutils cut:

cut -d' ' -f1 file
7
Gilles Quenot

Je vois qu'il y a déjà des réponses. Mais vous pouvez aussi le faire avec sed:

sed 's/ .*//' fileName
3
Memento Mori

Les solutions ci-dessus semblent correspondre à votre cas particulier. Pour une application plus générale de votre question, considérez que les mots sont généralement définis comme étant séparés par des espaces, mais pas nécessairement par des espaces. Les colonnes de votre fichier peuvent par exemple être séparées par des tabulations, voire séparées par un mélange d'onglets et d'espaces.

Les exemples précédents sont tous utiles pour trouver des mots séparés par des espaces, tandis que seul l'exemple awk trouve également des mots séparés par d'autres caractères d'espacement (et en fait, cela s'avère assez difficile à faire de manière uniforme dans diverses versions de sed/grep). Vous pouvez également vouloir explicitement ignorer les lignes vides, en modifiant l'instruction awk comme suit:

awk '{if ($1 !="") print $1}' your_file

Si vous êtes également préoccupé par la possibilité de champs vides, c'est-à-dire des lignes qui début _ avec des espaces, une solution plus robuste serait alors appropriée. Je ne suis pas assez habitué avec awk pour produire un one-liner dans de tels cas, mais un court script python qui fait le tour pourrait ressembler à ceci:

>>> import re
>>> for line in open('your_file'):
...     words = re.split(r'\s', line)
...     if words and words[0]:
...         print words[0]
1
Jeffrey Froman

... ou sous Windows (si vous avez grep GnuWin32):

grep -Eo "^[^ ]+" file
0
user3038458