getline
读入下一行并增加 NR
计数器减1。使用后getline
, awk
下一行继续工作。在大多数情况下,这是所需的行为。
在我的特殊情况下,我只需要查看下一行,然后根据其内容阅读下一行,或者我需要回溯一行。
如何回溯 awk
中的一行?我尝试设置 NR
手动计数器到 NR=NR-1
但这不起作用。或者有没有只看下一行而不改变NR
的方法?
我需要提前看一行。在这种情况下,简单地将行保存在变量中并稍后引用它是行不通的。我正在尝试在 awk
中实现一个文学编程工具,其中一个主文件可能包含许多子文件。这样的子文件以 "% file:file1"
这样的行开头.如果一行具有较低的缩进或另一行具有类似 "% file:file2"
的行,则到达此类文件的末尾。到达了。
所有匹配行的规则集 /% file:/
没有使用,当我已经用 getline 阅读了这一行时。这就是为什么我想重置 NR
到上一行,然后 awk
将读取匹配 /% file:/
的行再次执行相应的规则。
最佳答案
这可能接近您正在寻找的东西,并且不应该像 sed
那样昂贵。解决方案,因为 AWK 维护一个指向文件的指针 getline
打开。
awk 'FNR == 1 {
getline nextline < FILENAME
}
{
getline nextline < FILENAME;
print "currentline is:", $0;
print "nextline is: ", nextline
}' input file
第一个块读取第一行并浪费它。
在这种形式中,
getline
不设置任何变量,例如 NR
, FNR
, NF
或 $0
.它只设置您提供的变量(在本例中为 nextline
)。见 this一些额外的信息。
关于awk - 偷看下一行,但不要消费它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232780/