Linux文本文件处理-连接虚线

时间:2018-12-07 10:44:50

标签: linux shell text text-processing

我在处理文件时遇到问题。除了文件,其中包含8列用分斜符管道分隔的文件。问题在于,有时我会得到带有虚线的文件,例如下面的示例。

每次都应该是:

tst1|tst2|tst3|tst4|tst5|tst6|tst7|tst8  

但有时我会得到:

tst1|tst2|tst3|tst4|  
tst5|tst6|tst7|tst8  

我认为我应该在每行的第一个计数除法器编号中,当该编号不等于7时,我应该加入这2行。但是问题是怎么办呢?

对于任何有用的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:-1)

假设您的记录不超过两行,那么下面的Perl解决方案就可以了

/tmp> cat anton.csv
rec1|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec2|tst2|tst3|tst4|
tst5|tst6|tst7|tst8
rec3|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec4|tst2|tst3|tst4|tst5|tst6|
tst7|tst8
rec5|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec6|tst2|tst3|tst4|tst5|
tst6|tst7|tst8
/tmp> perl -F"\|" -ane ' if($#F==7) { print;$x=0;} else { chomp; $x++;print } print "\n" if $x==2 ' anton.csv
rec1|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec2|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec3|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec4|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec5|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec6|tst2|tst3|tst4|tst5|tst6|tst7|tst8
/tmp>

awk解决方案:

/tmp> awk -F"|" '{ if(NF==8)  { print;next } else { prev=curr;curr=sprintf("%s",$0);rc=rc+NF} if(rc==9) { print prev curr;rc=0 } }' anton.csv
rec1|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec2|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec3|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec4|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec5|tst2|tst3|tst4|tst5|tst6|tst7|tst8
rec6|tst2|tst3|tst4|tst5|tst6|tst7|tst8
/tmp>