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