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

Printing 如何打印与awk中的正则表达式匹配的特定字段,printing,awk,field,Printing,Awk,Field,这是一个简单的问题,但我没有找到答案… 我有一个选项卡,用许多行分隔文件,每行有不同数量的字段。像这样: a1_j a2_f a3_f a10_g a8_t a2_e a2_j a6_h a8_o a9_g a2_f a2_e a2_j 我只想打印以a2开头的字段,而不是整行,只打印匹配的字段。如下所示: a1_j a2_f a3_f a10_g a8_t a2_e a2_j a6_h a8_o a9_g a2_f a2_e a2_j 我尝试了awk,但没有成功。我会使用grep来实

这是一个简单的问题,但我没有找到答案…
我有一个选项卡,用许多行分隔文件,每行有不同数量的字段。像这样:

a1_j a2_f a3_f a10_g a8_t a2_e
a2_j
a6_h a8_o 
a9_g
a2_f
a2_e
a2_j
我只想打印以a2开头的字段,而不是整行,只打印匹配的字段。如下所示:

a1_j a2_f a3_f a10_g a8_t a2_e
a2_j
a6_h a8_o 
a9_g
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

你可以用awk来做。Stackoverflow哲学的一部分是帮助人们使代码正常工作。编辑您的问题以显示您已尝试过的内容,人们将非常乐意展示多种方式来获取您所需的内容,并帮助您了解代码中缺少的内容。祝你好运,我正等着呢!