如果使用awk在文件中找到匹配项,则在匹配后打印第“ n”行的第“ m”列

时间:2018-08-03 19:06:13

标签: awk

文件中找到特定的图案后,我需要打印第六行。在第6行中,我只想打印第5列。我可以使用以下命令来解决此问题的第一部分,

awk 'c&&!--c;/pattern/{c=6}' file

,但是我找不到修改它的方法来仅打印此第6行的第5列。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以为此使用内置的NR变量

awk '/pattern/ { nrs[NR + 6] = 1; } NR in nrs { print $5; delete nrs[NR] }'

这将测试pattern,并在其行号加六个(NR + 6)的数组中进行输入。然后,我们对该数组进行简单查找,以查看当前行号是否是我们要打印的行号(nrs[NR] == 1),然后打印第5列(print $5),然后清理该数组。

此解决方案说明了一个模式可能在给定的6行范围内多次出现的事实。

答案 1 :(得分:0)

如果您不了解所使用的脚本,请认真考虑并提出问题,这一点很重要。

awk 'c&&!--c;/pattern/{c=6}' file

只是使用默认行为作为速记

awk 'c&&!--c{print $0} /pattern/{c=6}' file

您可以对其进行微调:

awk 'c&&!--c{print $5} /pattern/{c=6}' file