2012-11-26 31 views
3

我有一個CSV文件,我想將特定列轉換爲小寫。什麼是在Linux中這樣做的有效方式?在CSV文件中將特定列轉換爲小寫

+4

請注意,有大量的輕微不兼容的CSV格式,因爲有大量的方法來回答是或否以下問題:雙引號是否可以引用逗號?如果報價被允許,是否必須引用整個字段?你可以通過在前面加一個反斜槓來包含雙引號字符嗎?那麼在第二個雙引號字符前面呢?雙引號字符串是否可以包含換行符?否則反斜槓也會轉義其他字符,如換行符,逗號或反斜槓本身?等 –

+1

可能是使用[Text :: CSV_XS](https://metacpan.org/module/Text::CSV_XS)的東西。 – melpomene

回答

3
awk -F"," 'BEGIN{OFS=","} {$5 = tolower($5); print}' file 

改變第5場。

也有-v OFS=",",但不是100%確定它是多麼標準;此外,,左右的引號可能會被忽略,但爲了一般性,我保留了這些引號。所以,作爲變體:

awk -F, -v OFS=, '{$5 = tolower($5); print}' file 

請注意,awk字段是基於1的。 sarathi的答案在perl中做了同樣的事情,這是基於0的;確保你選擇了正確的索引。

編輯:正如Melpomene正確地注意到,這兩種情況下只適用於簡單的CSV沒有引號或轉義。

+4

在「foo」,「bar」,「bar」,「baz」「」,quux'等東西上失敗。 – melpomene

0

,如果你想轉換colum3爲小寫例如:

perl -F -lane '$F[2]=lc($F[2]);print "@F"' your_file