如何削减csv的列

时间:2009-09-08 09:35:51

标签: shell ubuntu csv

我有一组csv文件(大约250个),每个文件有300到500条记录。我需要从每个文件中删除2或3列并将其存储到另一个文件中。我正在使用 ubuntu OS 。有没有办法在命令或实用程序中执行此操作?

4 个答案:

答案 0 :(得分:26)

如果您知道字段内没有列分隔符,则可以使用cut。

$ cat in.csv
foo,bar,baz
qux,quux,quuux
$ cut -d, -f2,3 < in.csv 
bar,baz
quux,quuux

您可以使用shell buildin'for'循环遍历所有输入文件。

答案 1 :(得分:11)

如果字段可能包含分隔符,您应该找到一个可以解析CSV文件的库。通常,通用脚本语言将在其标准库中包含CSV模块。

Ruby:   require 'csv'
Python: import csv
Perl:   use Text::ParseWords;

答案 2 :(得分:9)

如果您的字段包含逗号或换行符,则可以使用我编写的帮助程序来允许剪切(以及其他UNIX文本处理工具)正确处理数据。

https://github.com/dbro/csvquote

此程序在引用字段中查找特殊字符,并暂时用非打印字符替换它们,这些字符不会混淆剪切程序。然后他们在切割完成后恢复。

lutz'解决方案将成为:

csvquote in.csv | cut -d, -f2,3 | csvquote -u 

答案 3 :(得分:0)

如果您使用ssconvert获取CSV,则可以尝试:

ssconvert -O 'separator="|"' "file.xls" "file.txt"

请注意 TXT 扩展名 CSV ,这种方式将使用 Gnumeric_stf:stf_assistant 导出程序而不是 Gnumeric_stf:stf_csv ,它允许您使用选项(-O参数)。否则,您将获得文件保护程序不会出现选项错误。管道角色更不可能,但您可能想要先检查。

然后你可以重命名它并执行以下操作:

cat file.csv | cut -d "|" -f3 | sort | uniq -c | sort -rn | head