我需要在一行上打印匹配的行范围。
文件包含:
banana
start
1
2
3
stop
banana
banana
start
5
6
stop
我需要将其输出为
start 1 2 3 stop
start 5 6 stop
我目前正在使用基本/start/,/stop/{print $0}
语法来获取我的范围,但是
我正在寻找一种awk
的语法,它将在单行上输出我的范围。
(为清晰起见编辑)
答案 0 :(得分:3)
这应该有效
awk '/start/,/stop/{if($0 ~ /stop/){print}; if($0 !~ /stop/){printf $0" "}}' file
答案 1 :(得分:1)
gnu awk
版本(由于某些awk上的RS限制)
awk '$1=$1 {print $0,RS}' RS="stop" file
更强大的版本
awk '{$1=$1} $0 {print $0,RS}' RS="stop" file
这适用于所有awk
版本
awk '/stop/ {print;next} {printf "%s ",$0}' file
香蕉版
awk '/start/ {f=1} f {s=s?s" "$0:$0} /stop/ {print s;f=s=0}' file
答案 2 :(得分:1)
awk '{ORS = $1 == "stop" ? "\n" : " "; print}'
答案 3 :(得分:0)
gawk '$1 ~ /^start$/{in_range = 1; ORS = " ";} $1 ~ /^stop/{in_range = 0; ORS = "\n"; print $0; next;} in_range{print $0}' test2.txt