gpt4 book ai didi

awk - 如何调用 getline "roll back"?

转载 作者:行者123 更新时间:2023-12-01 22:34:29 25 4
gpt4 key购买 nike

如果我在 awk 脚本中使用 getline,它会从流中读取下一行并更新 $0 和 NR 变量(正如它应该的那样)。有没有办法取消getline

例如,我想使用 getline 来确定 EOF,然后对其采取操作。但如果条件为假(即不是 EOF),则脚本应正常继续。

#!/bin/gawk -f

{
print $0;

if (getline == 0)
{
print "EOF";
} else {
ungetline;
}
}

如果没有ungetline,上述脚本将仅打印每隔一个输入行。

可以使用 while() 构造来包装整个脚本主体,但对于此单一用途,撤消操作会更干净。

最佳答案

不确定这就是您要解决的问题,但例如,要在输入的最后一行之前打印一行,您可以遵循“延迟打印”方法。这里只是打印该行,但可以类似地添加任何处理。

$ seq 5 | awk 'NR>1 {print line} 
{line=$0}
END {print "and finally..."; print line}'

1
2
3
4
and finally...
5

根据您更新的帖子,也许您的用例只是模拟 END block 。

$ seq 5 | awk '{print $1*$1} 
END {print "EOF"}'

1
4
9
16
25
EOF

要么你在最后一行之前或者最后一次之后做一些事情;这些脚本涵盖了这两种情况。您也可以将这两者结合起来。我仍然不确定您的用例...

关于awk - 如何调用 getline "roll back"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com