私は最近ここで同じ質問をしましたが、いくつかの他の質問があります。前任者:
入力ファイル
******************
.WER
+ aaa bbb ccc
+ ddd eee
******************
.SDF
+ zzz xxx yyy
+ iii
+ kkk lll
******************
.XCV
+ uuu vvv ggg
+ hhh qqq
******************
希望の出力:
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
したがって、上記のように、1行も定義されていないファイルがあります。 2、3、または 4 にすることができ、各レコードは ****************** で区切られます。各レコードのすべての行を単一の行に変換できますか?正確な行数に成功しましたpaste -s -d ' \n'
。
答え1
$ sed -e :a -e '$!N;s/ *\n+ / /;ta' -e 'P;D' testfile
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
http://sed.sourceforge.net/sed1line.txt同様の例があります。
:a
ラベル「a」を作成$!N
最後の行($!)でない場合は、次の行(および改行)をパターンスペースに追加します。s/ *\n+ / /
末尾のスペース、改行、+、およびその後のスペースを単一のスペースに置き換えます。ta
ラベルaに戻るP
パターンスペースを印刷します。 sedの - オプションを使用していないので、これは2倍の出力を生成するので、-n
次のものが必要です。D
重複出力を削除します。
答え2
本当にawkを使用したい場合は、少なくともGNU awkを使用すると、次のことができます。
$ gawk -vRS='\n[*]+' -F'[ ]*\n[+][ ]*' '{NF+=0; ORS=RT} 1' file
******************
.WER aaa bbb ccc ddd eee
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq
******************
これは単に適切なレコードとフィールド区切り文字を設定し、デフォルト(単一スペース)フィールド区切り文字を使用してレコードを強制的に再結合します。