如何将多行汇总成以特定文本开头的单行

如何将多行汇总成以特定文本开头的单行

如何将多行汇总为以特定文本开头的单行?

例如:

P220002009034028180002          SSM      200903
P22200I2004220000     0408832000000000 
P222500903200000015{ 
P22261000005500000 
P22200I2008660000    8532818700000000 
P22467809000033336{ P2298320000550000 
P22230Y000003Va0    000000 0000000000 0000000000997  000000000000     Z N2 

如何检查以 开头的行P22200I,然后将其下的所有后续行合并为一行,直到找到以 开头的下一行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 

相关内容