如何从ASCII文件中的备用行中删除换行符

时间:2017-07-31 09:59:59

标签: awk sed

我有一个包含以下数据的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提供的解决方案,但随后它删除了导致一行的所有换行符!非常感谢任何想法。

3 个答案:

答案 0 :(得分:2)

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

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

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

显然,标签"\t"可以更改为您想要放在您加入的行之间的任何内容。

答案 1 :(得分: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两条线作为参数(空间用于组合它们)

答案 2 :(得分:0)

您可以使用命令

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

这意味着"对于每个奇数行,打印它而不用' \ n',得到下一行,用' \ n'"打印出来。