2009-09-08 49 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