一个非常简单的问题,但我没有找到答案。如何在awk中打印出特定字段?
awk '/word1/'
会打印出整个句子,但我只需要word1
。或者我需要从文本中仅打印出一系列模式(word1 + word2
)。
如果模式是单个单词(您想打印并且不包含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
根据您的喜好修改以上任何内容。
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 )}'
我知道你可以用awk做到这一点:
另一种选择是:
sed -nr "s/.*(PATTERN_TO_MATCH).*/\1/p" file
或者你可以使用 grep -o
也许是这样的:
awk '{split("bla1 bla2 bla3",a," "); print a[1], a[2], a[3]}'
grep -o
的功能吗? - johnsywebgrep -o
:) - johnsyweb