2017-04-19 156 views
-1

我有一個.CSV文件,其中行具有相同的ID。命令行編輯.CSV文件

下面是一個例子。CSV文件:

Alias,Date,Volume,Type,Type2,MSI 
ID1,20170418,0.516006112,CHART,GAS,10-10-10-1 
ID2,20170418,4.03900528,CHART,GAS,10-10-10-2 
ID2,20170418,0.399999887,METER,OIL,10-10-10-2 
ID2,20170418,0,METER,CONDY,10-10-10-2 
ID3,20170418,0.399999887,CHART,GAS,10-10-10-3 
ID4,20170418,6.599591255,CHART,GAS,10-10-10-4 
ID5,20170418,4.6501894,CHART,GAS,10-10-10-5 
ID6,20170418,1.831178546,CHART,GAS,10-10-10-6 
ID6,20170418,0.190000013,METER,OIL,10-10-10-6 
ID6,20170418,0,METER,CONDY,10-10-10-6 

我需要創建一個Linux腳本編輯這個.csv文件,看起來像這樣:

Alias,Date,Volume,Type,Type2,MSI,Volume Oil, Volume Condy 
ID1,20170418,0.516006112,CHART,GAS,10-10-10-1,, 
ID2,20170418,4.03900528,CHART,GAS,10-10-10-2,0.399999887,0 
ID3,20170418,0.399999887,CHART,GAS,10-10-10-3,, 
ID4,20170418,6.599591255,CHART,GAS,10-10-10-4,, 
ID5,20170418,4.6501894,CHART,GAS,10-10-10-5,, 
ID6,20170418,1.831178546,CHART,GAS,10-10-10-6,0.190000013,0 

如果別名域重複...

並且行具有METER OIL:將卷移至上一行中的'Volume Oil',刪除此行

和行有METER CONDY:移動捲上一行 '卷Condy',刪除此行

+1

你爲自己做了什麼? – Inian

+0

隨着SED,我能夠添加標題(第一行) – dalponis

回答

0

AWK方法(假設只能有三個記錄有相同ID):

awk -F, 'BEGIN{print "Alias,Date,Volume,Type,Type2,MSI,Volume Oil,Volume Condy"; } 
     NR>1{ (a[$1])? gsub(/,*$/, FS$3, a[$1]) : a[$1]=$0 FS FS} 
     END{ for(i in a) print a[i] }' file.csv 

輸出:

Alias,Date,Volume,Type,Type2,MSI,Volume Oil,Volume Condy 
ID1,20170418,0.516006112,CHART,GAS,10-10-10-1,, 
ID2,20170418,4.03900528,CHART,GAS,10-10-10-2,0.399999887,0 
ID3,20170418,0.399999887,CHART,GAS,10-10-10-3,, 
ID4,20170418,6.599591255,CHART,GAS,10-10-10-4,, 
ID5,20170418,4.6501894,CHART,GAS,10-10-10-5,, 
ID6,20170418,1.831178546,CHART,GAS,10-10-10-6,0.190000013,0 
+0

這看起來不錯,除了它留下0米的尷尬值。 – dalponis

+0

@TrevorWelsh,道歉,修正。現在很好 – RomanPerekhrest

+0

非常感謝!現在我只需要弄清楚所有這些是如何工作的:) – dalponis