一个非常简单的问题,没有找到答案。如何在awk中打印出特定字段?
当我只需awk '/word1/'
时, word1
会打印出整个句子。或者我需要一组模式(word1 + word2
)只能从文本中打印出来。
答案 0 :(得分:3)
如果模式是单个单词(您想要打印并且不能包含FS
(输入字段分隔符)),那么为什么不呢:
awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print MYPATTERN }' INPUTFILE
如果你的模式是正则表达式:
awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN { print gensub(".*(" MYPATTERN ").*","\\1","1",$0) }' INPUTFILE
如果必须在每个字段中检查您的模式:
awk -v MYPATTERN="INSERT_YOUR_PATTERN" '$0 ~ MYPATTERN {
for (i=1;i<=NF;i++) {
if ($i ~ MYPATTERN) { print "Field " i " in " NR " row matches: " MYPATTERN }
}
}' INPUTFILE
根据您的喜好修改上述任何内容。
答案 1 :(得分:1)
我知道你可以用awk做到这一点: 另一种选择是:
sed -nr "s/.*(PATTERN_TO_MATCH).*/\1/p" file
或者您可以使用grep -o
答案 2 :(得分:0)
或许这样的事情:
awk '{split("bla1 bla2 bla3",a," "); print a[1], a[2], a[3]}'
答案 3 :(得分:0)
awk中的字段由$ 1,$ 2等表示:
$ echo this is a string | awk '{ print $2 }' is
$ 0是整行,$ 1是第一个字段,$ 2是下一个字段(或空白), $ NF是最后一个字段,$(NF - 1)是倒数第二个字段,等等。
编辑(回应评论)。
你可以尝试:
awk '/crazy/{ print substr( $0, match( $0, "crazy" ), RLENGTH )}'