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



我有一个包含如下数据的 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

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

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两行作为参数(空格用于组合它们(

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

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

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

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

您可以使用命令

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

这意味着"对于每个奇数行,打印它而不带'',获取下一行,用''打印它"。

最新更新