Выпуск AWK в linux - PullRequest
       3

Выпуск AWK в linux

1 голос
/ 04 мая 2020

У меня есть следующий файл (teste.tsv):

dlah_C1 ACTGTCTGTCACTGTGTTGTGATGTTGTGTGTG
blah_C2 ACTTTATATATT
blah_C3 ACTTATATATATATA
blah_C4 ACTTATATATATATA
blah_C5 ACTTTATATATT
dlah_C6 ACTTATATATATATA
dlah_C7 ACTTATATATATATA
dlah_C8 ACTTTATATATT

Мне нужно распечатать только строки со словом «бла» из файла teste.tsv

I` я сделал эту командную строку:

cat teste.tsv | awk -F " " '{if($1 == "blah"){print $0}}'

Но я знаю, что это неправильно, потому что я хочу поймать любые слова, начинающие бла. Я пробовал $ 1 == "blah *" или $ 1 == "blah. *", Но ничего не происходит.

Может ли кто-нибудь мне помочь? Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 04 мая 2020

== - оператор сравнения строк, ~ - оператор сравнения регулярного выражения. Ваш код использует сравнение строк (==), но пытается использовать метасимволы регулярного выражения (* и .* в нем).

Любой из них будет печатать каждую строку, которая начинается с blah. Они выполняют сравнение регулярных выражений:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file

, в то время как они выполняют сравнение строк:

awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file
1 голос
/ 04 мая 2020

Не могли бы вы попробовать следующее.

awk 'BEGIN{FS="_"} $1=="blah"' Input_file

Проблема с кодом OP: OP logi c кажется хорошим, но первое поле НЕ только имеет blah, но есть и другие вещи с _. Вот почему он не печатает правильно.

Мое исправление: Я сделал _ как разделитель полей для всех строк. Теперь, когда мы сравниваем первое поле с условием, оно будет ловить строку blah



Выше будет искать точное слово blah в первом поле, если вы хотите использовать регулярное выражение, затем попробуйте выполнить следующее.

awk 'BEGIN{FS="_"} /^blah/' Input_file

ИЛИ без установочного разделителя:

awk '/^blah/' Input_file
0 голосов
/ 04 мая 2020

Я попробовал следующую команду, и она тоже работает.

cat teste.tsv | awk -F "_" '{if($1 == "blah"){print $0}}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...