我有一个awk来自这个例子的脚本:
awk '/START/{if (x) print x; x="";}{x=(!x)?$0:x","$0;}END{print x;}' file
Run Code Online (Sandbox Code Playgroud)
这是一个带有行的示例文件:
$ cat file
START
1
2
3
4
5
end
6
7
START
1
2
3
end
5
6
7
Run Code Online (Sandbox Code Playgroud)
所以我需要在目标字符串包含end单词时停止连接,因此所需的输出是:
START,1,2,3,4,5,end
START,1,2,3,end
Run Code Online (Sandbox Code Playgroud)
简短的Awk解决方案(虽然它会检查/end/模式两次):
awk '/START/,/end/{ printf "%s%s",$0,(/^end/? ORS:",") }' file
Run Code Online (Sandbox Code Playgroud)
输出:
START,1,2,3,4,5,end
START,1,2,3,end
Run Code Online (Sandbox Code Playgroud)
/START/,/end/- 范围模式甲范围图案由用逗号分隔两个图案,在形式
‘begpat, endpat’.它用于匹配连续输入记录的范围.第一个模式begpat控制范围开始的位置,同时endpat控制模式结束的位置.
/^end/? ORS:"," - 为范围内的当前项设置分隔符