1

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

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

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

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

4

4 回答 4

1

这些类型的问题总是因为您在 Windows 上创建了输入文件,所以它在行尾有虚假的 control-M。在您的输入文件上运行 dos2unix 以清理它,然后重新运行您的 awk 命令,但将其重写为:

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

解决几个不相关的问题。

于 2013-09-18T16:20:29.727 回答
0

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

awk -F ',' -v RS='\r\n' '{print > ("Mydata" $1 ".csv") }' myfile.csv
于 2013-09-18T16:47:04.977 回答
0

只是不要忘记关闭您的文件:

awk -F ',' '{ f="Mydata"$1".csv"; print $0 > f; close(f) }' myfile.csv
于 2016-09-20T21:23:02.640 回答
-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
于 2013-09-18T15:57:25.520 回答