次のファイルがあります
"IN001~24Apr16~Hi,
what a way?
oh no!~
not here~"
"IN003~29Apr16~
what a way?
~oh no!
say again.
not again~"
次の形式で出力したいと思います。
"IN001~24Apr16~Hi,what a way?oh no!~not here~"
"IN003~29Apr16~what a way?~oh no!say again.not again~"
awkまたはsedを使用するすべてのソリューションを大歓迎です。
答え1
awk '{ printf "%s",$0 }; /"$/ { print ""; };' inputfile
入力行が二重引用符で終わる場合にのみ、出力に改行文字が表示されます。したがって、このawk
コードは改行なしですべての入力行を出力します。次に、入力行が a で終わっていることを確認し、"
そうであれば改行文字を出力します。
答え2
$ sed -n -e '/^"/{h;n;}' -e H -e '/"$/{g;s/\n//g;p;}' file
"IN001~24Apr16~Hi,what a way?oh no!~not here~"
"IN003~29Apr16~what a way?~oh no!say again.not again~"
このsed
コマンドは...
/^"/{h;n;}
"
:で始まるすべての行を予約済みスペース()にコピーしh
、その中のすべての内容を上書きしてすぐに次の入力行(n
)に移動します。H
:予約済みスペースに追加の行が追加されます。/"$/{g;s/\n//g;p;}
:行が"
予約済みスペースで終わっている場合は、予約済みスペース()を取り、改行が削除されg
(この改行は予約済みスペースに行が追加されたときに追加されます)、結果の文字列が印刷されます。
コマンドラインは次のように圧縮できます。
$ sed -n '/^"/{h;n;};H;/"$/{g;s/\n//g;p;}' file