我的文件是带有逗号分隔字段的csv
文件。
我试图通过第一个字段将文件拆分为多个文件。我做了以下事情:
cat myfile.csv | awk -F',' '{print $0 > "Mydata"$1".csv"}'
它会拆分文件,但文件已损坏,每个文件的最后一行都不完整。突破位置似乎是随机的。有人有同样的问题吗?
答案 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