Afficher chaque cinquième colonne et les précédentes

Résolu
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je dois afficher chaque cinquième colonne d'une ligne et les colonnes précédentes. C'est à dire que je dois parcourir la ligne et à chaque fois que je rencontre une colonne multiple de 5, je l'affiche ainsi que les colonnes précédentes.
j'ai utilisé
awk -F: '{for(i=5; i>=1; i--){print $i}}' passwd
mais ceci ne m'affiche que de la 5ème à la première colonne. j'ai besoin d'aide.
A voir également:

2 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
pour clarifier, tu veux afficher les colonnes 5 1 2 3 4 10 6 7 8 9 etc ?
0
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Oui justement c'est ce que je veux faire!
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
une méthode un peu simpliste si il y a moins de 21 champs
$ awk 'BEGIN {FS=OFS=":"; m=split("5:1:2:3:4:10:6:7:8:9:15:11:12:13:14:20:16:17:18:19", a)} {for(n=1; n<m; n++){if (c=$a[n])printf c FS; else {print ""; next}}}' fichier
0
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Et si ma ligne est de la sorte
speech-dispatcher:x:107:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
sachant que les séparateurs sont les ":".
Ceci ne marche pas
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
quel doit etre le resultat ?
0
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
"Speech Dispatcher,,,:speech-dispatcher:x:107:29"
c'est ce qui doit être le résultat. Et si j'avais 10 champs par exemple comme ceci
"speech-dispatcher:x:107:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh:bien:bonjour:rfin"
le résultat doit être
"Speech Dispatcher,,,:speech-dispatcher:x:107:29:rfin::/var/run/speech-dispatcher:/bin/sh:bien:bonjour"
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
j'obtiens ca avec le 2eme exemple
Speech Dispatcher,,,:speech-dispatcher:x:107:29:rfin:/var/run/speech-dispatcher:/bin/sh:bien:bonjour:
0
S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
Tu sais, je ne connais pas à l'avance ce que chaque ligne du fichier contient comme chaîne de caractères. Imagines que mon fichier ait 1000 lignes, s'il faut que j'écrive ça manuellement, je risque d'y passer toute une vie. la boucle que je dois faire, doit pouvoir le faire à ma place
0