3

一致した範囲の行を 1 行に出力する必要があります。

ファイルに含まれるもの:

banana
start
1
2
3
stop
banana
banana
start
5
6
stop

これを次のように出力する必要があります

start 1 2 3 stop
start 5 6 stop

現在、範囲を取得するために基本的な構文を使用していますが、範囲を 1 行で出力/start/,/stop/{print $0}する構文を探しています。awk(明確にするために編集されています)

4

4 に答える 4

1
awk '{ORS = $1 == "stop" ? "\n" : " "; print}'
于 2013-10-21T21:05:01.590 に答える
1

バージョン (一部のgnu awkawk での 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
于 2013-10-21T20:57:27.243 に答える