テキストにある文字列ブロックを挿入する
1 test1 1 test2 1 test3 2 test1 2 test2 2 test3 2 test4 3 test1 3 test2 3 test3
というファイルを以下のようにしたいというものです。
1 beg 1 test1 1 test2 1 test3 1 end 2 beg 2 test1 2 test2 2 test3 2 test4 2 end 3 beg 3 test1 3 test2 3 test3 3 end ||<< そこで無理して作ったのか以下のようなもので、これを直して欲しいというものです。 >|awk| awk '{ old=new new=$1 } $1 != old { if (oline) print oline newl=$0 $2="beg" print $0 print newl old=$1 next } $1 == old { print; $2="end"; oline=$0 } END {print oline} '
回答は以下のようなものです。
$1 != prev { print (prev ? prev " end" ORS : "") $1 " beg"; prev=$1 } 1 END { print prev " end" }
$1 != prev { pre() } $1 != prev { print $1, "beg"; prev = $1 } 1 END { pre() } function pre() { if (prev) print prev, "end" }
$1 != prev { pre(); print $1, "beg"; prev = $1 } 1
one!=(now=$1){print (NR==1?"":"end"ORS)"beg"ORS $0;one=now;next} 1 END{print "end"}