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.

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    pour clarifier, tu veux afficher les colonnes 5 1 2 3 4 10 6 7 8 9 etc ?
    0
    1. S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Oui justement c'est ce que je veux faire!
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. 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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      quel doit etre le resultat ?
      0
    3. S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18627 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
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      j'obtiens ca avec le 2eme exemple
      Speech Dispatcher,,,:speech-dispatcher:x:107:29:rfin:/var/run/speech-dispatcher:/bin/sh:bien:bonjour:
      0
    5. S-Killer Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > dubcek Messages postés 18627 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