【发布时间】:2012-06-08 08:24:20
【问题描述】:
我有一个如下所示的文本文件。它有一些我想删除的额外换行符。
LINE1: @Line1Col1 @Line1Col2
LINE2: @Line1Col3 @Line1Col4 @ Line1Col5@
LINE3: @Line2Col1 @Line2Col2 @Line2Col3
LINE4: @Line2Col4@
LINE5: Line2Col5 @
我想删除换行符,使它看起来像这样:
@Line1Col1 @Line1Col2 @Line1Col3 @Line1Col4 @Line1Col5@
@Line2Col1 @Line2Col2 @Line2Col3 @Line2Col4@ Line2Col5@
如果一行以@定界符开始并以@定界符结束,则该行被定义为完整。 请注意,分隔符 @ 已存在于文件中。 例如,追加 LINE1 和 LINE2 使该行完整。 类似地,附加 LINE3、LINE4 和 LINE5 会形成另一个完整的行(其中,在每一行上,数据 LineXcolX 用于说明目的)。 因此,我需要删除 LINE1 中的换行符并保留 LINE2 中的换行符。 同样,我需要删除 LINE3 和 LINE4 中的换行符并保留 LINE5 中的换行符。 中间可以有多个空格;因此,空格不能用于解决方案。
重新编辑[添加了实际文件的一部分]
我能想到的一个逻辑是,仅在前一行以“@”结尾而当前行以“@”开头的条件下保留新行。 但是,我不确定如何在 shell 中实现这一点,或者是否有更好的逻辑。
@ 258908159@258908159@Subwork=E,Mment=SS09 @ 4@Jun 5 2012 23:24:41 @Jun 5 2012 23:24:00 @ 2@* "DUMMYI"U 120605 虚拟数据 @Jun 5 2012 23:26:00 @ 403@ 21@PRCAIE @ 10780093@ -2@ @ -1@ -2@ 1@ 35@ 1@ @ -1@ NULL@ -1@ 154@ 1@ 40958044@ 1@ 1@ 3@ 0@ -2@ 1@
@ 258908158@ 258908158@Subwork=E,Mment=SS09 @ 4@2012 年 6 月 5 日 23:24:41 @2012 年 6 月 5 日 23:24:00 @ 2@ 3TEST3
结束@2012 年 6 月 5 日 23:26:00 @ 402@ 21@ @ 10780093@ -2@ @ -1@ -2@ 1@ 35@ 1@ @ -1@ NULL@ -1@ 154@ 1@ 40958044@ 1@ 1@ 3@ 0@ -2@ 0@
@ 258908158@258908158@Subwork=E,Mment=SS09 @ 4@Jun 5 2012 23:24:41 @Jun 5 2012 23:24:00 @ 2@* "DUMMYI"U 120605 DUMMY @Jun 5 2012 23:26:00 @ 402@ 21@PRCAIE @ 10780093@ -2@ @ -1@ - 2@ 1@ 35@ 1@ @ -1@ NULL@ -1@ 154@ 1@ 40958044@ 1@ 1@ 3@ 0@ -2@ 1@
@ 258908157@ 258908157@Subwork=E,Mment=SS09 @ 4@2012 年 6 月 5 日 23:24:41 @2012 年 6 月 5 日 23:24:00 @ 2@ 3TEST3
结束@2012 年 6 月 5 日 23:26:00 @ 401@ 21@ @ 10780093@ -2@ @ -1@ -2@ 1@ 35@ 1@ @ -1@ NULL@ -1@ 154@ 1@ 40958044@ 1@ 1@ 3@ 0@ -2@ 0@
谢谢。
【问题讨论】:
-
基于您粘贴的示例文件内容的原始位:在我看来,不可能知道在哪里放置正确的换行符,因为没有“模式”可以帮助您识别.我认为可以解决的唯一方法是:您可以计算“@”字符的数量,并在第 N 个“@”之后换行。
-
请编辑您的示例输入/输出以展示您的要求。
-
无法从新输入(来自 RE-EDITED 部分)获取
Line1或Line2(如Line2Col1)。请明确您希望新输入的输出。 -
@ 258908158@ 258908158,整个模式在@ 258908159@ 258908159中出现两次,第二次包含@ 258908157@ 258908157。这部分需要澄清。