2017-07-31 102 views
1

我有一个包含数据如下如何删除从交替行的换行符在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 

我想含有日期线被contactenated到它上面的线的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 

我尝试提供的解决方案here但随后删除导致一个单行的所有换行符!希望有任何想法。

回答

2

打印各行,一个标签和一个换行作为输出记录分隔符ORS之间交替:

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

NR是当前记录(行)数,因此NR % 2是真对奇数行。

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

+0

该命令为每个第3行,第6行,第9行添加一个选项卡。这似乎是与TAB缩进这些线。 –

+0

我不明白为什么它每隔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两条线一起作为参数(空间用于它们合并)
+1

您可能还想将其转换为'column -t' – hek2mgl

+0

@ hek2mgl好点,但不确定OP的数据是制表符分隔以及“AND PARDES APIN”是单列还是多列。 – Sundeep

+0

是的,这取决于。 – hek2mgl

0

可以使用命令

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

这意味着“每一个奇数行打印它没有‘\ n’,得到下一行,用'\ n'“打印。