首页 > 解决方案 > Linux中的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

我只需要打印 teste.tsv 文件中带有单词“blah”的行

我做了那个命令行:

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

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

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

标签: awk

解决方案


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

其中任何一个都将打印以 . 开头的每一行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

推荐阅读