パターンの最初の部分を失うことなくパターンが見つかるまで、複数の行を1つにリンクします。

パターンの最初の部分を失うことなくパターンが見つかるまで、複数の行を1つにリンクします。

次のスキーマがあります。

i-095erwr244r22cfeaa
TF-CLIENT
TF-StKML2
i-0c23232ac153534c5d
TF-CLIENT
TF-COMMON
TF-STEERR
i-043434e0934347eb5
TF-CLIENT
TF-ADFS
TF-COMMON
TF-STCLUSTER_1
TF-SwewCLUSTER3

私は次のような出力が欲しい

i-095erwr244r22cfeaa,TF-COMMON;TF-StKML2;
i-0c23232ac153534c5d,TF-CLIENT;TF-COMMON;TF-STEERR;
i-043434e0934347eb5,TF-CLIENT;TF-ADFS;TF-COMMON;TF-STCLUSTER_1;TF-SwewCLUSTER3

私はこれを試みます:

awk 'BEGIN{RS="i-"}NF>1{print substr(gensub(/\n/,";","g"),0,length($0)-0)}' sg1.txt

同様の投稿に基づいていますここにあります。私は次のような結果を得る

095erwr244r22cfeaa;TF-COMMON;TF-StKML2;
0c23232ac153534c5d;TF-CLIENT;TF-COMMON;TF-STEERR;
043434e0934347eb5;TF-CLIENT;TF-ADFS;TF-COMMON;TF-STCLUSTER_1;TF-SwewCLUSTER3

したがって、「i-0」パターンの先頭を切り取り、すべての出力にセミコロンを追加します。最初のエントリにはコンマが必要です。使ってみようかと思いました。sed結果から最初のセミコロンを変更します。しかし、最初に全体の出力をどのように取得できますか?

ベストアンサー1

私のGNUsed提案tr

tr '\n' ';' < file | sed -E 's/(i-0[^;]*);/\n\1,/g'

出力:

i-095erwr244r22cfeaa,TF-CLIENT;TF-StKML2;
i-0c23232ac153534c5d,TF-CLIENT;TF-COMMON;TF-STEERR;
i-043434e0934347eb5,TF-CLIENT;TF-ADFS;TF-COMMON;TF-STCLUSTER_1;TF-SwewCLUSTER3;

おすすめ記事