Parsing de ligne ave awk

MArsdu13 -  
 Marsdu13 -
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!!!
A voir également:

4 réponses

Utilisateur anonyme
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
Marsdu13
 
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