我的文件是一个csv
带有逗号分隔字段的文件。
我试图通过第一个字段将文件拆分为多个文件。我做了以下事情:
cat myfile.csv | awk -F',' '{print $0 > "Mydata"$1".csv"}'
它确实拆分了文件,但文件已损坏,每个文件的最后一行不完整。突破位置似乎是随机的。有人有同样的问题吗?
这些类型的问题总是因为您在 Windows 上创建了输入文件,所以它在行尾有虚假的 control-M。在您的输入文件上运行 dos2unix 以清理它,然后重新运行您的 awk 命令,但将其重写为:
awk -F',' '{print > ("Mydata" $1 ".csv") }' myfile.csv
解决几个不相关的问题。
使用此 awk 命令忽略\r
之前的字符\n
:
awk -F ',' -v RS='\r\n' '{print > ("Mydata" $1 ".csv") }' myfile.csv
只是不要忘记关闭您的文件:
awk -F ',' '{ f="Mydata"$1".csv"; print $0 > f; close(f) }' myfile.csv
请改用真正的 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