如何在awk中打印与正则表达式匹配的特定字段



这是一个简单的问题,但我没有找到答案。
我有一个标签分隔文件与许多行和不同数量的字段在每行。这样的:

a1_j a2_f a3_f a10_g a8_t a2_e
a2_j
a6_h a8_o 
a9_g

我只想打印那些以a2开头的字段,但不是整行,只是匹配的字段。这样的:

a2_f
a2_e
a2_j

我试过awk,没有成功。

我会使用grep:

grep -o 'a2_[a-z]' file

-o开关表示只打印匹配项,每个匹配项在单独的行上。

您可以使用for循环遍历所有字段,或者使用fmt将所有字段放在一行:

~$ fmt -w1 f
a1_j
a2_f
a3_f
a10_g
a8_t
a2_e
a2_j
a6_h
a8_o
a9_g

,然后grep与grep,或者如果你想使用awk:

~$ fmt -w1 f | awk '/a2/{print}'
a2_f
a2_e
a2_j

使用GNU awk支持多字符RS和s:

$ awk -v RS='\s' '/^a2/' file
a2_f
a2_e
a2_j

相关内容

  • 没有找到相关文章

最新更新