2015-11-06 72 views
-1

我用下面的腳本來更新CSV文件,但它都將第二coumn設置爲零所有更新的列轉到零

cat file_0.csv notZero.csv > update.csv 

file_0.csv

"m01";"0";"yyy";"zzz" 
"m02";"0";"yy";"zzz" 
"m03";"0";"y";"zzz" 

和notZero.csv

"m02";"5";"yy";"zzz" 
"m04";"7";"yyy";"zzz" 
"m05";"8";"yy";"zzz" 
"m06";"9";"y";"zzz" 

預期輸出

"m01";"0";"yyy";"zzz" 
"m02";"5";"yy";"zzz" 
"m03";"0";"y";"zzz" 
"m04";"7";"yyy";"zzz" 
"m05";"8";"yy";"zzz" 
"m06";"9";"y";"zzz 

+0

你爲什麼期望file_0中的m02行不顯示在輸出中? – Evert

+0

我期望如果他們的第一列是相同的,那麼它會更新第二列,但是兩個文件的所有行必須存在於update.csv中我使用了join -a1 file_0.csv notZero.csv> update.csv但沒有工作 – user5507230

回答

0

join讓你很長的路要走,但你必須指定字段分隔符,以及:

$ join -a1 -a2 -t';' notZero.csv file_O.csv 

這給

"m01";"0";"yyy";"zzz" 
"m02";"5";"yy";"zzz";"0";"yy";"zzz" 
"m03";"0";"y";"zzz" 
"m04";"7";"yyy";"zzz" 
"m05";"8";"yy";"zzz" 
"m06";"9";"y";"zzz" 

注意輸入的順序文件,以便任何匹配的字段將首先具有非零值。

爲了擺脫多餘的字段,你可以使用cut

$ join -a1 -a2 -t';' notZero.csv file_O.csv | cut -d';' -f1,2,3,4 

"m01";"0";"yyy";"zzz" 
"m02";"5";"yy";"zzz" 
"m03";"0";"y";"zzz" 
"m04";"7";"yyy";"zzz" 
"m05";"8";"yy";"zzz" 
"m06";"9";"y";"zzz" 

但是對於任何更高級的組合,我建議,以避免外殼和shell命令,並使用更復雜的語言。