【问题标题】:How do I remove the line break from alternate lines in an ASCII file如何从 ASCII 文件中的备用行中删除换行符
【发布时间】:2018-01-06 20:13:16
【问题描述】:

我有一个包含如下数据的 ASCII 文件

    459999XXX9998882      WTD CCD           3,500.00-         0.00         3,500.00-         0.00       0.00
       09/07/17  23:00:07   999999999999 000000000000 EONCO024 GTUR BR              AND PARDES  APIN
    459999XXX9998883      WTD CCD             400.00-         0.00           400.00-         0.00       0.00
       09/07/17  23:00:12   999999999999 000000000000 EOMCO015 P.G ROAD, ANNA HOT SECU  TLIN
    29999XXX99988829      INQ CCD               0.00          0.00             0.00          0.00       0.00
       09/07/17  23:00:41   999999999999 000000000000 EOMCO010 PUNA KUMBHARIA ROAD,   SUR        GJIN
    5459999XXX999888   INQ SAV               0.00          0.00             0.00          0.00       0.00    UNABLE TO PROC
       09/07/17  23:00:44   999999999999 000000000000 EONCO089 CTS NO 3985/5 ST STAND SOL      MHIN

我希望将包含日期的行与上面的行联系起来。 Essenatilly 我想从奇数行中删除所有换行符。所以结果是这样的

459999XXX9998882      WTD CCD           3,500.00-         0.00         3,500.00-         0.00       0.00 09/07/17  23:00:07   999999999999 000000000000 EONCO024 GTUR BR              AND PARDES  APIN
459999XXX9998883      WTD CCD             400.00-         0.00           400.00-         0.00       0.00 09/07/17  23:00:12   999999999999 000000000000 EOMCO015 P.G ROAD, ANNA HOT SECU  TLIN
29999XXX99988829      INQ CCD               0.00          0.00             0.00          0.00       0.00 09/07/17  23:00:41   999999999999 000000000000 EOMCO010 PUNA KUMBHARIA ROAD,   SUR        GJIN
5459999XXX999888      INQ SAV               0.00          0.00             0.00          0.00       0.00    UNABLE TO PROC 09/07/17  23:00:44   999999999999 000000000000 EONCO089 CTS NO 3985/5 ST STAND SOL      MHIN

我尝试了here 提供的解决方案,但随后它删除了所有换行符,导致一行!任何想法都将不胜感激。

【问题讨论】:

标签: awk sed


【解决方案1】:

打印每一行,在制表符和换行符之间交替作为输出记录分隔符ORS

awk '{ ORS = NR % 2 ? "\t" : "\n" } 1' file

NR 是当前记录(行)号,所以NR % 2 在奇数行上为真。

显然,"\t" 选项卡可以更改为您想要放在要连接在一起的行之间的任何内容。

【讨论】:

  • 此命令每 3、6、9 行添加一个制表符。似乎是用 TAB 缩进这些行。
  • 我不明白为什么它会每 3 行执行一次 - 如果在偶数行的开头已经有制表符,那么您应该将 "\t" 更改为 ""
【解决方案2】:
sed 'N;s/\n/ /' ip.txt 
  • N 将下一行添加到模式空间
  • s/\n/ / 将第一个换行符更改为空格(或任何分隔符)
  • \n 的使用可能取决于sed 的实现。这是在GNU sed 上测试的

使用perl,如果行号为奇数则更改换行符

perl -pe 's/\n/ / if $.%2' ip.txt


也可以用

xargs -d'\n' -n2 -a ip.txt
  • -d'\n' 换行符作为分隔符
  • -n2 将两行放在一起作为参数(空格用于组合)

【讨论】:

  • 您可能还想通过管道将其发送到column -t
  • @hek2mgl 好点,但不确定 OP 的数据是否以制表符分隔以及 AND PARDES APIN 是单列还是多列..
  • 是的,这取决于。
【解决方案3】:

你可以使用命令

awk 'NR % 2 == 1 { printf $0; getline; print $0 }' filename

这意味着“对于每一个奇数行打印它没有'\n',获取下一行,用'\n'打印它”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2011-01-10
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多