Linux中的AWK问题

Ped*_*que 1 awk

我有以下文件(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
Run Code Online (Sandbox Code Playgroud)

我必须只打印 teste.tsv 文件中带有“blah”字样的行

我已经制作了该命令行:

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

但我知道这是错误的,因为我想抓住任何开始胡说八道的词。我试过 $1 == "blah*" 或 $1 == "blah.*" 但没有任何反应。

有人可以帮助我吗?非常感谢。

Ed *_*ton 5

==是字符串比较运算符,~是正则表达式比较运算符。您的代码正在使用字符串比较 ( ==),但尝试使用正则表达式元字符(*以及.*其中的)。

其中任何一个都将打印以blah. 这些正在做正则表达式比较:

awk '/^blah/' file
awk '$0 ~ /^blah/' file
awk 'match($0,/^blah/)' file
awk 'match($0,/blah/) == 1' file
Run Code Online (Sandbox Code Playgroud)

虽然这些正在进行字符串比较:

awk 'index($0,"blah") == 1' file
awk 'substr($0,1,4) == "blah"' file
Run Code Online (Sandbox Code Playgroud)