Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

Также можно найти подстроку с функцией index():

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

Если в вашей строке есть специальные символы (например, двойная кавычка), более безопасная версия такова:

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

Более короткие версии:

awk 'index($3, "snow")' dummy_file
awk -v var="$var" 'index($3, var)' dummy_file

Ответ 4

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

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

Ответ 5

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