Awk : garder les colonnes contenant regex
Résolu
Bulot56
Messages postés
10
Statut
Membre
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
J'ai un fichier (monstrueux avec plein de colonnes!) dont je voudrai garder uniquement les colonnes dont la première ligne contient regex (en l'occurrence X, Y ou Z).
Par exemple :
tens1 x1 y1 z1 ea1 tens2 tens3 x3
4 6 3 7 9 10 36 3
devient :
x1 y1 z1 x3
6 3 7 3
J'imagine que awk est mon ami (mais je me trompe peut être ...).
Une bonne idée ?
J'ai un fichier (monstrueux avec plein de colonnes!) dont je voudrai garder uniquement les colonnes dont la première ligne contient regex (en l'occurrence X, Y ou Z).
Par exemple :
tens1 x1 y1 z1 ea1 tens2 tens3 x3
4 6 3 7 9 10 36 3
devient :
x1 y1 z1 x3
6 3 7 3
J'imagine que awk est mon ami (mais je me trompe peut être ...).
Une bonne idée ?
5 réponses
-
hello
$ awk -v regex="x|y|z" 'NR==1 {for(n=1; n<=NF; n++)if($n ~ regex)c[++col]=n} {for(n=1; n<=col;)printf $c[n++] OFS; print ""}' fichier x1 y1 z1 x3 6 3 7 3 $ -
Mieux qu'une bonne idée, une solution !
C'est super efficace, merci beaucoup ...
Bon, si je décortique un peu, "|" c'est OU
Si je veux faire un ET ? J'ai pas beaucoup de succès avec '&' . -
oui, | c'est ou.
pour and, il faut un peu changer la regexp: par ex , contient x ou z ET yawk -v r="x|z && y" ...
-
Merci bcp ! Bon, je complique un tout petit peu la tache ... je cherche à garder les colonnes contenant ou $x ou $y ou $z. J'arrive pas à échapper le $ ! Est ce que tu as encore une solution ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
double \
$ cat a0 tens1 $x1 y1 $z1 ea1 tens2 tens3 x3 4 6 3 7 9 10 36 3 $ awk -v regex='\\$x|\\$y|\\$z' 'NR==1 {for(n=1; n<=NF; n++)if($n ~ regex)c[++col]=n} {for(n=1; n<=col;)printf $c[n++] OFS; print ""}' a0 $x1 $z1 6 7 $