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

时间:2015-05-15 13:54:38

标签: printing awk field

这是一个简单的问题,但我没有找到答案...... 我有一个制表符分隔文件,每行有很多行和不同数量的字段。像这样:

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,但没有成功。

3 个答案:

答案 0 :(得分:2)

我会用grep来做到这一点:

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

-o开关意味着只打印匹配,每个匹配在一个单独的行上。

答案 1 :(得分:1)

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

~$ 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

答案 2 :(得分:1)

使用GNU awk进行多字符RS和\s

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