如何将多行汇总为以特定文本开头的单行?
例如:
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