Bonjour,

je me casse la tête depuis ce matin sur un truc qui je pense est simple mais dont j'ai beau retourné dans tout les sens je n'arrive pas à avoir le résultat que je veux.

En gros voici mon problème, j'ai un fichier comme l'/etc/passwd sous linux dont je souhaite afficher toute les ligne sauf la dernière, je sais c'est basique et il y a de multiple façon de le faire simplement mais si je suis ici c'est parce que je veux le faire avec une certaine manière

Je voudrais donc pourvoir faire cette opération en utilisant la variable NR de awk, du style :

1) Connaitre le nombre de ligne avec NR
2) Faire une boucle du style "tant que i < NR; afficher la ligne; ++i"

Le problème est que NR n'affiche le total que si on lui met un END à la fin, donc si je fais ma boucle ça va afficher plusieurs fois la même chose à chaque énumération de la la ligne. Par conséquent est-il possible de récupérer le total de la variable NR dès le début et de l'utiliser comme nombre fixe pour faire la boucle ?

Concrètement j'ai un fichier toto de ce style :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
ligne1
ligne2
ligne3
ligne4
ligne5
si je fais une boucle ça donne ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# cat /tmp/plik |awk  '{i=0; while (i < NR) {print; i++;}}'
ligne1
ligne2
ligne2
ligne3
ligne3
ligne3
ligne4
ligne4
ligne4
ligne4
ligne5
ligne5
ligne5
ligne5
ligne5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
# cat /tmp/plik |awk  '{print NR}'
1
2
3
4
5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
# cat /tmp/plik |awk  'END {print NR}'
5
ce que je voudrais c'est ça:

Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
#<super awk de la mort qui tue> NR ?
ligne1
ligne2
ligne3
ligne4


Je ne sais pas si c'est faisable ?

Merci d'avance.