2012-11-17 92 views
2

通過CSV文件循環並在讀取時創建新的csv文件?

while read $field1 $field2 $field3 $field4 
do 
    $trimmed=$field2 | sed 's/ *$//g' 
    echo "$trimmed","$field3" >> new.csv 
done < "$FEEDS"/"$DLFILE" 

現在的問題是read我不能讓它分割字段CSV風格,可以嗎?請參閱下面的輸入csv格式。

我需要得到第3列和第4列,剝離第2列的填充,我不需要引號。

CSV格式與COL號碼: 12 24( 「)25(,)26(」)/ 27(Field2values)42(「)/ 43(,)/ 44(字段3十進制值) 」Field1_constant_value「, 「Field2values」,Field3,Field4

Field1是不變且不相關的,數據引用在引號內從2-23開始 Field2使用引號內的第27-41行固定,數據在左側並填充 Field3是一個十進制數字,在小數點前有1,2或3位數字,後面是2,沒有填充。從第74列開始。 Field4是一個日期,我不太在乎它。現在。

回答

6

是的,你可以用read;您所要做的就是重置環境變量IFS - 內部字段分隔符 - ,以便它不會將行按當前值(默認爲空格)拆分,而是由您自己的分隔符分隔。

考慮輸入文件 「a.csv」,與給定的內容:

1,2,3,4-

-2,3,4,5-

6,3 ,2,1

你可以這樣做:

IFS=',' 
while read f1 f2 f3 f4; do 
    echo "fields[$f1 $f2 $f3 $f4]" 
done < a.csv 

並且輸出是:

領域[1 2 3 4]

領域[2 3 4 5]

領域[6 3 2 1]

+4

'while IFS =,read f1 f2 f3 f4; do ...'將避免爲整個腳本設置「IFS」。 –