特定のテキストで始まる複数行を1行にまとめるには?
たとえば、
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000
P222500903200000015{
P22261000005500000
P22200I2008660000 8532818700000000
P22467809000033336{ P2298320000550000
P22230Y000003Va0 000000 0000000000 0000000000997 000000000000 Z N2
P22200I
で始まる行を確認し、次の行が見つかるまで、その下のすべての後続行を1行にマージするにはどうすればよいですかP22200I
。この「要約」操作は、P22200Iで始まる行でのみ実行する必要があります。
出力は次のようになります。
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000 P222500903200015{
P22200I2008660000 85328187000026574 P224678090033336{ P22230Y000003Va0 000000
私はLinuxを使用しています。
答え1
そしてawk
:
awk 'BEGIN{ ORS="" }
FNR>1 && /^P22200I/{ printf "\n" }
1
END{ printf "\n" }
' file
出力レコード区切り文字を空の文字列(デフォルト\n
)に設定し、現在の行が最初の行ではなく行が始まる場合は改行文字を印刷しますP22200I
。次に、現在の行(1
)を印刷します。
ファイルの終わりに達すると、別の改行を印刷します。
出力:
P220002009034028180002 SSM 200903
P22200I2004220000 0408832000000000 P222500903200000015{ P22261000005500000
P22200I2008660000 8532818700000000 P22467809000033336{ P2298320000550000 P22230Y000003Va0 000000 0000000000 0000000000997 000000000000 Z N2