如果我在我的awk脚本中使用getline
,它会从流中读取下一行并更新$ 0和NR变量(应该如此)。有没有办法解开 - getline
?
例如,我想使用getline
来确定EOF,然后对其采取措施。但如果条件为假(即不是EOF),则脚本应该正常继续。
#!/bin/gawk -f
{
print $0;
if (getline == 0)
{
print "EOF";
} else {
ungetline;
}
}
如果没有ungetline
,上面的脚本将只打印每隔一个输入行。
可以使用while()
构造包装整个脚本体,但是对于这一次使用,撤消操作更简洁。
答案 0 :(得分:1)
不确定您要解决的问题,例如,要在输入的最后一行之前打印一行,您可以按照"延迟打印"方法。在这里它只是打印线,但任何处理都可以类似地添加。
$ seq 5 | awk 'NR>1 {print line}
{line=$0}
END {print "and finally..."; print line}'
1
2
3
4
and finally...
5
根据您更新的帖子,也许您的用例只是模拟END
块。
$ seq 5 | awk '{print $1*$1}
END {print "EOF"}'
1
4
9
16
25
EOF
要么在最后一行之前或最后一次之后做某事;这些脚本都涵盖了这两种情况。你也可以将这两者结合起来。我还不确定你的用例......