awk - 偷看下一行,但不要消费它

标签 awk gawk

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/

相关文章:

bash - 是否可以将多个流的内容输出到终端中的单独列中?

perl - 批量重命名目录中的文件名

regex - awk - 正则表达式中的变量扩展

linux - AWK:从另一个文件添加新字段

linux - 奇怪的 awk 输出包含空格

linux - 在 sed 或 awk 中,如何处理*可能*跨越多行的记录分隔符?

shell - 如何使用awk删除第2列和第3列与某些先前匹配的行?

linux - 如何使用 gawk/grep 打印特定的文本列表?例如我想打印txt文件中存在的所有颜色的名称

arrays - 如何将变量切片为数组索引?

regex - 在正则表达式中使用变量