Parsing de ligne ave awk

Bonsoir,
J'ai un petit soucis qui me tient à coeur, j'ai dans un script shell une boucle qui lit un fichier et n'en affiche que le dernier élément, après éxecution ce n'est pas vraiment ce que je désire, en fait la taille des lignes est aléatoire et la seule chose fixe c'est que je veux tous les éléments qui suivent le 4ème élément jusq'au dernier : actuellement j'ai donc

file=$(echo "$ligne" |awk '{print $NF}')

mais j'aimerais avoir $5 jusqu'à $NF, y-a-t-il un moyen simple ou dois ajouter une condition dans ma boucle ?

Merci!!!

4 réponses

  1. tu tiens à ce que ce soit par awk ?
    parce que cut s'y prête très bien

    si ton délimiteur est un espace mettons
    cut -d' ' -f5- <<<"pim pam toc plouf grouik zou tac"
    grouik zou tac

    bon si le délimiteur est de longueur variable ça se complique...
    0
    1. Modérateur
      Salut,

      voici avec sed et awk
      file=$(echo pim pam toc plouf grouik zou tac | awk 'BEGIN{ORS=" "}{for(i=5;i<=NF;++i) print $i}')
      echo $file
      grouik zou tac
      file1=$(echo pim pam toc plouf grouik zou tac | sed -r 's/^([a-z]+\s*){4}//')
      echo $file1
      grouik zou tac
      --
      lami20j
      0
      1. Modérateur
        Salut,

        Ou en shell pur :
        $ file="pim pam toc plouf grouik zou tac"
        
        $ echo $file
        
        pim pam toc plouf grouik zou tac
        
        $ set $file
        
        $ echo $*
        
        pim pam toc plouf grouik zou tac
        
        $ shift 4
        
        $ echo $*
        
        grouik zou tac
        
        $
        ;-))
        0
        1. Merci beaucoup, la première réponse de tagadazou était un peu moins bonne car effectivement j'avais plusieurs espaces, mais la faute vient de moi car je ne précise pas grand chose dans ma question...

          La 2ème est celle que je pensais chercher, la troisième est surprenante car je ne la connaissais pas, j'ignorais le shift que je connaissais en PERL...

          Bravo donc à tous et merci...!
          0