0

在文件中找到特定模式后,我需要打印第 6 行。在第 6 行,我只想打印第 5 列。我可以使用以下命令完成此问题的第一部分,

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

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

4

2 回答 2

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 行范围内多次出现的事实。

于 2018-08-03T19:12:52.867 回答
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
于 2018-08-04T15:26:14.670 回答