2009-09-08 51 views
13

我有一组csv文件(大约250),每个文件都有300到500个记录。我需要从每个文件中剪切2或3列并将其存储到另一个文件中。我正在使用Ubuntu OS。有什么方法可以在命令或实用程序中执行它?如何剪切csv的列

回答

22

如果您知道列分隔符不出现在字段内,则可以使用cut。

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

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

+2

你可以用类似的方式对所有文件进行可伸缩处理: 找到“* .csv”| xargs cut -d,-f2,3> out.csv – pixelbeat 2009-09-08 10:41:24

+2

如果您想摆脱逗号或将其更改为其他名称,则可以使用'cut'的--output-delimiter = STRING'选项。 – 2009-09-08 14:16:19

+14

这个答案的主要问题是'cut'不处理包含分隔符的引用字段。如果您的CSV文件具有这样的数据,则需要使用其他内容。 – 2011-10-05 14:03:39

9

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

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

如果字段包含逗号或换行符,您可以使用一个辅助程序,我写,让切(和其他UNIX文本处理工具),以正确的数据工作。

https://github.com/dbro/csvquote

该程序发现特殊字符引述领域内,并暂时与非打印,不会混淆的切割程序字符替换它们。然后在切割完成后恢复。

卢茨”解决方案将成为:

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

是的,它对我来说非常好:https://stackoverflow.com/questions/17199311/how-to-delete-a-column-columns-of-a-csv-file-which-has-cell-values-with -a串/ 29134579#29134579 – nono 2015-03-18 23:39:58

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