1

我从 Oracle SQL DB 进行了查询,但由于某种原因,结果文件被修剪如下:

52358288288673;01-06-2013 00:00:04;/john/wayne/subm
it;0,22;889;30008;1201;
51258186442676;01-06-2013 00:00:18;/john//wayne/finding/
sss/zone;0,22;889;30008;1531;
55344684156846;01-06-2013 00:00:31;/john/wayne/nosu
chthing;0,22;889;30008;1901;
536511965579726;01-06-2013 00:00:48;/john/wayne/cha
rs/get;0,22;889;30008;1504;

我在 OSX 上,我已经尝试使用 tr、sed、awk 和 perl 来解决我在这里看到的其他问题,但它们仍然没有奏效,或者如果我删除了所有回车符,那么我最终将所有行放在一起。

我需要一种方法来读取文件并找到没有 ; 的每一行 最后并附加下一行。

52358288288673;01-06-2013 00:00:04;/john/wayne/submit;0,22;889;30008;1201;
51251234256762;01-06-2013 00:00:18;/john//wayne/finding/sss/zone;0,22;889;30008;1531;
55344684156846;01-06-2013 00:00:31;/john/wayne/nosuchthing;0,22;889;30008;1901;
53651196579726;01-06-2013 00:00:48;/john/wayne/chars/get;0,22;889;30008;1504;

我尝试过类似的东西:

cat file.txt | sed "s/$(printf '\r')\$//"
cat file.txt | tr ';$\n' '\n'
cat file.txt | sed ':a;N;$!ba;s/\n/ /g'
cat file.txt | sed ^'s/;$//g'

但没有什么能完成工作。该文件中有更多垃圾,我已将其删除,但我找不到解决此问题的方法。我在想,当一行没有 ; 最后,然后 - >删除回车。但我想单行的要求太多了?建议?

4

3 回答 3

0
awk '{print $0} FNR%2==0 {printf("\n");}' infile > outfile
于 2013-07-31T00:16:17.623 回答
0

这个 awk 脚本搜索 NOT (!) the ; 在行尾,如果找到它会打印(没有换行符),然后用于next转到下一行。如果没有找到,它只会打印该行。

awk '!/;$/ {printf;next}1' infile
于 2013-07-31T00:36:04.553 回答
0

尝试以下(这几乎是不言自明的)

while read line 
do 
  if [ `echo $line | grep ';$' | wc -l` -eq 0 ] ; then
        echo $line | sed 's|\n||g' >> $outputfile
  else
        echo $line >> $outputfile
  fi
done < $inputfile
于 2013-07-31T04:26:52.123 回答