2014-02-13 71 views
0

我需要從CSV中刪除一些列。簡單。 問題是我有兩列全文,實際上有逗號作爲數據的一部分。我的列附有引號,而貓則將文本中的逗號數列爲列。我怎樣才能做到這一點,所以用引號括起來的逗號會被忽略?LINUX:使用cat刪除CSV中的列 - 某些數據中包含逗號

例如:

"first", "last", "dob", "some long sentence, it has commas in it,", "some data", "foo" 

我只想打印1-4行,6

+0

請舉一些例子說明輸入和你的期望輸出。 –

+0

剛纔你是怎麼用'貓'做這個的? AFAIK'cat'沒有編輯功能。這看起來像'sed'的工作。 – 2014-02-13 04:40:02

+1

@mikew就像我喜歡sed一樣,這是一個csv解析器的工作。 – Kevin

回答

2

您將通過編寫使用Parse::CSVhttp://metacpan.org/pod/Parse::CSV

短的Perl腳本保存自己很多的惡化我相信也有一種Python的方式。

+0

您也可以使用Text :: CSV和Text :: CSV_XS。 –

1
cat file | sed -e 's|^"||;s|"$||' | awk 'BEGIN {FS="[\"], ?[\"]"}{print $2}' 

例子: http://ideone.com/g2gZmx

它是如何工作: 看行:

"a,b","c,d","e,f" 

我們知道,每排由""包圍。因此,我們可以通過","拆分此行:

cat file | awk 'BEGIN {FS="[\"], ?[\"]"}{print $2}' 

和行會:

"a,b c,d e,f" 

但是,我們必須在開始和行末惱人"。因此,我們有sed將其刪除:

cat file | sed -e 's|^"||;s|"$||' | awk 'BEGIN {FS="[\"], ?[\"]"}{print $2}' 

而且行會

a,b c,d e,f 

然後我們就可以通過awk '{print $2}簡單地採取第二排。

閱讀有關正則表達式場分裂在AWK:http://www.gnu.org/software/gawk/manual/html_node/Regexp-Field-Splitting.html

+0

好帖子! 'cat file'不是必需的。可以做'sed -e'| ^「||; s |」$ ||'文件...' –

+0

不是真的,某些時候cvs的格式爲'1997,Ford,E350,「超級豪華卡車」,請參考http://en.wikipedia.org/wiki/Comma-separated_values – BMW

相關問題