101 votes

awk correspondance partielle de la chaîne (si la colonne/mot correspond partiellement)

Mon fichier factice ressemble à ceci :

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman

Je veux obtenir la ligne s'il y a une chaîne snow en 3 $. Je peux faire ça comme ça :

awk '($3=="snow" || $3=="snowman") {print}' dummy_file

Mais il devrait y avoir un moyen plus simple.

190voto

Ahmed Masud Points 6603
awk '$3 ~ /snow/ { print }' dummy_file

50voto

Thunderbeef Points 647

Également possible en recherchant la sous-chaîne avec la fonction index() :

awk '(index($3, "snow") != 0) {print}' dummy_file

Version courte :

awk 'index($3, "snow")' dummy_file

10voto

Ahmed Al Hafoudh Points 668

Peut-être que cela aidera

http://www.math.utah.edu/docs/info/gawk_5.html

awk '$3 ~ /snow|snowman/' dummy_file

8voto

iiSeymour Points 34967

Imprimer les lignes où le troisième champ est soit snow o snowman seulement :

awk '$3~/^snow(man)?$/' file

2voto

Endoro Points 34982

GNU sed

sed '/\s*\(\S\+\s\+\)\{2\}\bsnow\(man\)\?\b/!d' file

Entrée :

C1    C2    C3    
1     a     snow   
2     b     snowman 
snow     c     sowman
      snow     snow     snowmanx

..sortie :

1     a     snow
2     b     snowman

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X