BASH - 删除回车附加下一行,但不是每次都附加

时间:2013-07-31 00:10:25

标签: bash shell unix

我从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'

但是没有任何工作可以完成。该文件中有更多垃圾,我已删除,但我找不到解决这个问题的方法。我在想,当一条线没有;最后,然后 - >删除回车。但我猜一个单行问题太多了?建议?

3 个答案:

答案 0 :(得分:0)

awk '{print $0} FNR%2==0 {printf("\n");}' infile > outfile

答案 1 :(得分:0)

这个awk脚本搜索NOT(!);在行尾,如果发现它打印(没有换行),则使用next转到下一行。如果没有找到它只是打印线。

awk '!/;$/ {printf;next}1' infile

答案 2 :(得分: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