1

我有多个文件,我在其中提取两个分隔符(不包括 START 和 END)之间的文本。处理完每个文件后,我想输出一个分隔符,指示文件已被处理,比如字符串“END”。在每个处理的文件之后,如何将字符串“END”添加到输出中?例如,

假设我有两个包含内容的文件

文件1.txt

line 1
line 2
START
I want to extract this text
and this text
END
line 3
line 4

文件2.txt

line10
line20
START
I also want this text.
END
line 30

我知道我是否执行以下操作:

awk '/START/,/END/{if (!/START/&&!/END/) print}' test*.txt

我将得到以下输出:

I want to extract this text
and this text
I also want this text.

但我想要的输出是:

I want to extract this text
and this text
END
I also want this text.
END

如何在处理每个文件后将字符串“END”添加到输出中?

4

3 回答 3

1
FNR==1 && NR!=1 {print "END"}
END {print "END"}

所以你会有:

awk 'FNR==1 && NR!=1 {print "END"} /START/,/END/{if (!/START/&&!/END/) print} END {print "END"}' test*.txt
于 2010-12-16T19:03:54.350 回答
0

变量 FNR 在每个新文件上都重置为 0,因此您可以在 (FNR==0 && NR!=0) 上有一个规则触发器:

(FNR==0) && (NR!=0) {
  print "END"
}
END {
  print "END"
}
于 2010-12-16T19:05:12.207 回答
0

您要求 awk 跳过打印 END。不要那么做。

awk '/START/,/END/{if (!/START/) print}' test*.txt
于 2010-12-17T11:18:12.123 回答