【发布时间】:2017-02-02 12:04:19
【问题描述】:
我有一个简单的文件,由我的 awk 脚本处理:
AAAAA BBBBBB
CCCCC DDDDDD
EEEEE FFFFFF
GGGGG HHHHHH
IIIII JJJJJJ
首先,我想打印出最后一行,所以我从
#!/usr/bin/awk
{if (NR==5){print $0;}}
因此得到IIIII JJJJJJ。
现在我想在打印出第 5 行后打印第 2 行。所以我把我的脚本改成这样:
#!/usr/bin/awk
{if (NR==5){print $0; NR=2;}
if (NR==2){print $0;}
但在这种情况下,这是一个永无止境的循环。如何先打印第 5 行,然后再打印第 2 行而不再次打印第 5 行?
为清晰起见,预期输出:
IIIII JJJJJJ
CCCCC DDDDDD
【问题讨论】:
-
最终脚本中没有永无止境的循环。设置
NR=2不会告诉 awk 重新开始读取第 2 行的输入,它只是将变量NR设置为值2直到读取下一行,第 6 行,此时NR变为6。此外,您还缺少基本的 awkcondition { action }语法 - awk 不是 C。请阅读 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书。
标签: awk