web-dev-qa-db-fra.com

impression du premier mot dans chaque ligne d'un fichier texte unix bash

J'essaie donc d'imprimer le premier mot de chaque ligne d'un fichier txt. Les mots sont séparés par un blanc.

cut -c 1 txt file 

C'est le code que j'ai jusqu'à présent mais il n'imprime que le premier caractère de chaque ligne. Merci

18
ap1993

Pour imprimer un mot entier, vous voulez -f 1, ne pas -c 1. Et comme le délimiteur de champ par défaut est TAB plutôt que SPACE, vous devez utiliser le -d option.

cut -d' ' -f1 filename

Pour imprimer les deux derniers mots pas possible avec cut, AFAIK, car il ne peut compter qu'à partir du début de la ligne. Utilisez à la place awk:

awk '{print $(NF-1), $NF;}' filename
28
Barmar

tu peux essayer

awk '{print $1}' your_file
22
CS Pei
read Word _ < file
echo "$Word"

Ce qui est bien avec cette solution, c'est qu'elle ne lit pas au-delà de la première ligne du fichier. Même awk, qui a une syntaxe très claire et laconique, doit être explicitement dit pour arrêter la lecture après la première ligne. read lit juste une ligne à la fois. De plus, c'est une commande bash (et une commande intégrée dans de nombreux shells), vous n'avez donc pas besoin d'un nouveau processus pour s'exécuter.

Si vous souhaitez imprimer le premier mot de chaque ligne:

while read Word _; do printf '%s\n' "$Word"; done < file

Mais si le fichier est volumineux, awk ou cut gagnera pour la lecture de chaque ligne.

10
kojiro

-c est pour les caractères, vous voulez -f pour les champs et -d pour indiquer votre séparateur d'espace au lieu de l'onglet par défaut:

cut -d " " -f 1 file
1
Alex Howansky

Vous pouvez utiliser:

cut -d\  -f1 file

Où:

  • -d est le délimiteur (ici en utilisant \ pour un espace)
  • -f est le sélecteur de champ

Notez qu'il y a un space après le \.

1
termux overflow