在awk中循环和处理两个图案之间的线条块



这实际上是这个问题的延续版本:

我有一个文件

1
2
PAT1
3    - first block
4
PAT2
5
6
PAT1
7    - second block
PAT2
8
9
PAT1
10    - third block

我使用awk '/PAT1/{flag=1; next} /PAT2/{flag=0} flag'以提取线条块。

提取它们还可以,但我正在尝试以逐块的方式迭代这些blooks,并对每个块进行一些处理(例如保存到文件、使用其他脚本进行处理等(

我如何构建这样一个循环?

问题不是很清楚,但您可以执行以下操作:

awk '/PAT1/ {
flag = 1
++n
s = ""
next
}
/PAT2/ {
flag = 0
printf "Processing record # %d =>n%s", n, s
}
flag {
s = s $0 ORS
}' file
Processing record # 1 =>
3    - first block
4
Processing record # 2 =>
7    - second block

这可能对你有用(GNU sed(:

sed -ne '/PAT1/!b;:a;N;/PAT2/!ba;e echo process:' -e 's/.*/echo "&"|wc/pe;p' file

收集PAT1PAT2之间的线路,并处理集合。

在上面的例子中,文字process:被打印出来。

生成并打印用于打印集合的wc命令的结果的命令。

打印上述命令的评估结果。

N。B.p标志在替换命令中的位置至关重要。如果pe标志之前,则在评估之前打印图案空间,如果p标志在e标志之后,则图案空间在评估之后。

最新更新