特定のテキストで始まる複数行を1行にまとめる方法

特定のテキストで始まる複数行を1行にまとめる方法

特定のテキストで始まる複数行を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 

関連情報