我在处理文件时遇到问题。除了文件,其中包含8列用分斜符管道分隔的文件。问题在于,有时我会得到带有虚线的文件,例如下面的示例。
每次都应该是:
tst1|tst2|tst3|tst4|tst5|tst6|tst7|tst8
但有时我会得到:
tst1|tst2|tst3|tst4|
tst5|tst6|tst7|tst8
我认为我应该在每行的第一个计数除法器编号中,当该编号不等于7时,我应该加入这2行。但是问题是怎么办呢?
对于任何有用的建议,我将不胜感激。
答案 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>