awk拆分文件给出不完整的行

时间:2013-09-18 15:38:26

标签: linux csv awk gawk

我的文件是带有逗号分隔字段的csv文件。

我试图通过第一个字段将文件拆分为多个文件。我做了以下事情:

cat myfile.csv | awk -F',' '{print $0 > "Mydata"$1".csv"}'

它会拆分文件,但文件已损坏,每个文件的最后一行都不完整。突破位置似乎是随机的。有人有同样的问题吗?

4 个答案:

答案 0 :(得分:1)

这些类型的问题总是因为您在Windows上创建了输入文件,因此它在行尾有假的控件-Ms。在输入文件上运行dos2unix进行清理,然后重新运行awk命令,但重新编写为:

awk -F',' '{print > ("Mydata" $1 ".csv") }' myfile.csv

解决一些无关的问题。

答案 1 :(得分:0)

使用此awk命令忽略\r之前的\n个字符:

awk -F ',' -v RS='\r\n' '{print > ("Mydata" $1 ".csv") }' myfile.csv

答案 2 :(得分:0)

不要忘记关闭文件:

awk -F ',' '{ f="Mydata"$1".csv"; print $0 > f; close(f) }' myfile.csv

答案 3 :(得分:-1)

使用真正的CSV解析器/生成器。对于不常见的输入(包括具有多线值的输入)是安全的。这是Ruby的单行代码:

ruby -e 'require "csv";CSV.foreach(ARGV.shift){|r| File.open("Mydata#{r[0]}.csv","w").puts(CSV.generate_line(r))}' file.csv