首页 > 解决方案 > 循环和处理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 并对每个块进行一些处理(例如保存到文件,处理其他脚本等)。

我怎样才能构建这样的循环?

标签: unixawksedtext-processing

解决方案


问题不是很清楚,但你可以这样做:

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

推荐阅读