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