我需要從CSV中刪除一些列。簡單。 問題是我有兩列全文,實際上有逗號作爲數據的一部分。我的列附有引號,而貓則將文本中的逗號數列爲列。我怎樣才能做到這一點,所以用引號括起來的逗號會被忽略?LINUX:使用cat刪除CSV中的列 - 某些數據中包含逗號
例如:
"first", "last", "dob", "some long sentence, it has commas in it,", "some data", "foo"
我只想打印1-4行,6
我需要從CSV中刪除一些列。簡單。 問題是我有兩列全文,實際上有逗號作爲數據的一部分。我的列附有引號,而貓則將文本中的逗號數列爲列。我怎樣才能做到這一點,所以用引號括起來的逗號會被忽略?LINUX:使用cat刪除CSV中的列 - 某些數據中包含逗號
例如:
"first", "last", "dob", "some long sentence, it has commas in it,", "some data", "foo"
我只想打印1-4行,6
您將通過編寫使用Parse::CSV
http://metacpan.org/pod/Parse::CSV
短的Perl腳本保存自己很多的惡化我相信也有一種Python的方式。
您也可以使用Text :: CSV和Text :: CSV_XS。 –
cat file | sed -e 's|^"||;s|"$||' | awk 'BEGIN {FS="[\"], ?[\"]"}{print $2}'
它是如何工作: 看行:
"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
好帖子! 'cat file'不是必需的。可以做'sed -e'| ^「||; s |」$ ||'文件...' –
不是真的,某些時候cvs的格式爲'1997,Ford,E350,「超級豪華卡車」,請參考http://en.wikipedia.org/wiki/Comma-separated_values – BMW
請舉一些例子說明輸入和你的期望輸出。 –
剛纔你是怎麼用'貓'做這個的? AFAIK'cat'沒有編輯功能。這看起來像'sed'的工作。 – 2014-02-13 04:40:02
@mikew就像我喜歡sed一樣,這是一個csv解析器的工作。 – Kevin