如何在AWK中打印出特定字段?

时间:2012-02-05 21:01:38

标签: awk filtering

一个非常简单的问题,没有找到答案。如何在awk中打​​印出特定字段?

当我只需awk '/word1/'时,

word1会打印出整个句子。或者我需要一组模式(word1 + word2)只能从文本中打印出来。

4 个答案:

答案 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 )}'