Awk частично строковое соответствие (если частично совпадают слова/слова)

Мой фиктивный файл выглядит так:

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

Я хочу получить строку, если есть строка snow в $3. Я могу сделать это вот так:

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

Но должен быть более простой способ.

5 ответов

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


Также возможно поиск подстроки с помощью функции index():

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


Возможно, это поможет

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

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


Печатать строки, в которых третье поле имеет только snow или snowman:

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


GNU sed

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

Input:

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

.. выход:

1 a snow
2 b snowman

licensed under cc by-sa 3.0 with attribution.