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
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
tu peux essayer
awk '{print $1}' your_file
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.
-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
Vous pouvez utiliser:
cut -d\ -f1 file
Où:
\
pour un espace)Notez qu'il y a un space
après le \
.