在文件中找到特定模式后,我需要打印第 6 行。在第 6 行,我只想打印第 5 列。我可以使用以下命令完成此问题的第一部分,
awk 'c&&!--c;/pattern/{c=6}' file
但我找不到修改它以仅打印第 6 行的第 5 列的方法。任何帮助将不胜感激。
在文件中找到特定模式后,我需要打印第 6 行。在第 6 行,我只想打印第 5 列。我可以使用以下命令完成此问题的第一部分,
awk 'c&&!--c;/pattern/{c=6}' file
但我找不到修改它以仅打印第 6 行的第 5 列的方法。任何帮助将不胜感激。
您可以为此使用内置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 行范围内多次出现的事实。
如果您不理解正在使用的脚本,请务必认真思考并提出问题。
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