在awk中处理每个文件后添加分隔符

时间:2010-12-16 18:55:21

标签: awk gawk nawk

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

假设我有两个内容

的文件

FILE1.TXT

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

FILE2.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”添加到输出中?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

(FNR==0) && (NR!=0) {
  print "END"
}
END {
  print "END"
}

答案 2 :(得分:0)

你要求awk跳过打印END。停止。

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