awk partiellement chaîne correspond (si colonne / mot correspond partiellement)

Mon fichier factice ressemble à ceci:

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

Je veux obtenir une ligne s’il y a de la snow à 3 $. Je peux faire ça comme ça:

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

Mais il devrait y avoir un moyen plus simple.

 awk '$3 ~ /snow/ { print }' dummy_file 

Aussi possible en recherchant une sous-chaîne avec la fonction index ():

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

Peut-être que cela aidera

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

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

Imprimer des lignes où le troisième champ est snow ou snowman uniquement:

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

GNU sed

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

Consortingbution:

 C1 C2 C3    
 1 une neige   
 2 b bonhomme de neige 
 bonhomme de neige
       bonhomme de neige neige

..sortie:

 1 une neige
 2 b bonhomme de neige