2015-11-05 96 views
-2

該文件按第7列排序,並且需要將字段11,12,13,14,15和16組合爲具有相同ID的每一行行,即列的價值7.AWK:合併CSV文件中的列

我終於獨自解決了我的問題,感謝所有!!

What I have done: 

BEGIN{ 
    FS="\t" 
    x="\"\""; 
} 

(NR !=1){ 
     for(i=11;i<=16;i++) 
     { 
      if($i!= x) 
      { 
       k=match(a[$7], $i); 
       if (k == 0) 
       { 
        a[$7]=a[$7]"\t"$i; 
       } 
      } 
     } 

     b[$7]=b[$7]"|"$17"\t"$18"\t"$19"\t"$20; 
     c[$7]=c[$7]"|"$1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10; 
    } 

END{ 
    for (g in a) 
    { 
     t=split(a[g], A, "\t"); 
     for (y=t; y<7; y++) 
     { 
      a[g]=a[g]"\t"x; 
     } 

     mx=split(b[g], B, "|"); 
     mt=split(c[g], C, "|"); 
# From here, it's where I have the problem. I don't know how to square the values of the variables for the next two loops. So the lines are not duplicated 
     for (i=2; i<=mx; i++) 
     { 
      print C[i]"\t"a[g]"\t"B[i]; 
     } # Here I left over a "for{}" loop 
    } 
} 

輸入CSV文件:

subtype idproject qvnqsa country lang id idkey vbt_type brand_reco dealer_reco M1 M2 M3 M4 M5 M6 verbatim Edited Translated Category keywords  
V voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak."    
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,aangename"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,persoonlijke"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "luisteren"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "nemen,tijd"   
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP024" "super"  
V voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "" "" "" "" "" "" "Ok" "Ok" "Ok"     
VP voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok" "VP024" "Ok"   

我得到了我的腳本。在輸出線上翻了一番。

subtype idproject qvnqsa country lang id idkey vbt_type brand_reco dealer_reco M1 M2 M3 M4 M5 M6 verbatim Edited Translated Category keywords  
V voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak."    
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,aangename"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,persoonlijke"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "luisteren"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "nemen,tijd"   
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP024" "super" 
V voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak."    
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,aangename"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,persoonlijke"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "luisteren"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "nemen,tijd"   
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP024" "super" 

V voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok"     
VP voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok" "VP024" "Ok" 
V voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok"     
VP voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok" "VP024" "Ok" 

預期輸出:

subtype idproject qvnqsa country lang id idkey vbt_type brand_reco dealer_reco M1 M2 M3 M4 M5 M6 verbatim Edited Translated Category keywords  
V voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak."    
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,aangename"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "aanpak,persoonlijke"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "luisteren"  
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP001" "nemen,tijd"   
VP voc_sales_ren "QVN" "BE" "NL" "027460100" **"027460100expe"** "expe" "9" "9" "VP001" "" "" "" "" "" "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "Van het eerste moment tot het laatste moment een super-service! Ze luisteren, nemen hun tijd. Een zeer persoonlijke aangename aanpak." "VP024" "super"  
V voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok"     
VP voc_sales_ren "QVN" "BE" "NL" "027460103" **"027460103expe"** "expe" "9" "9" "VP024" "" "" "" "" "" "Ok" "Ok" "Ok" "VP024" "Ok"   

輸入:

ID A  B  C  D E F G H 
1  "9" "9" "Vp25" "" "" "" "" "" 
1  "9" "9" "Vp34" "" "" "" "" "" 
1  "9" "9" "Vp98" "" "" "" "" "" 
2  "9" "9" "Ap45" "" "" "" "" "" 
2  "9" "9" "Ap66" "" "" "" "" "" 

預期輸出:

ID A  B  C  D  E  F G H 
1  "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
1  "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
1  "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
2  "9" "9" "Ap45" "Ap66" "" "" "" "" 
2  "9" "9" "Ap45" "Ap66" "" "" "" "" 
+0

t1;博士。請閱讀http://stackoverflow.com/help/mcve –

+0

我所概述的問題是否理解?任何幫助? – Polucho

+0

@glennjackman感謝您的鏈接。你能幫我嗎? – Polucho

回答

0

CLAR後更新問題的提出: 對於某個鍵(某個列中的值)的所有實例,必須收集另一列中的不同值並將其插入每行的列的範圍內:
假設,我們的製表符分隔inputFile看起來像這樣

ID A B C  D E F G H 
1 "9" "9" "Vp25" "" "" "" "" "" 
1 "9" "9" "Vp34" "" "" "" "" "" 
1 "9" "9" "Vp98" "" "" "" "" "" 
2 "9" "9" "Ap45" "" "" "" "" "" 
2 "9" "9" "Ap66" "" "" "" "" "" 

和第一列充當鍵。然後,任務是填補CG列在發現的所有不同的值,例如,列下一個關鍵:

ID A B C  D  E  F G H 
1 "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
1 "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
1 "9" "9" "Vp25" "Vp34" "Vp98" "" "" "" 
2 "9" "9" "Ap45" "Ap66" "" "" "" "" 
2 "9" "9" "Ap45" "Ap66" "" "" "" "" 

這可以用下面的AWK腳本來實現:

awk 'BEGIN{FS=OFS="\t"; key=1; aggregate=4; to=8;} 
    NR==FNR{ 
     if($aggregate != "\"\"") { 
      a[$key] = a[$key]$aggregate""OFS 
      b[$key] = b[$key] +1 
     } 
    } 
    NR!=FNR{ 
    if(FNR == 1) {print $0} 
    else { 
     line = "" 
     for(i=1;i<aggregate;i++) { 
      line = line""$i""OFS; 
     } 
     line = line""a[$key] 
     for(i = aggregate+b[$key]; i<=to; i++){line= line"\"\""OFS} 
     for(i=to+1; i<NF; i++) { 
      line = line""$i""OFS 
     } 
     line = line""$NF 
    print line 
    } 
}' inputFile inputFile 

請注意inputFile被添加了兩次!此外,在BEGIN{...}部分中,必須指定包含鍵(key)的列的索引,要聚合數據的列的索引aggregate以及表示範圍的末尾的列的索引

+0

我測試時輸出不正確。 – Polucho

+0

@Criatos:示例適用於我,如果我正確理解您的問題。爲什麼你的輸出不正確?你能提供一個例子嗎?有一個假設,我從你的例子中複製:「空」字段11-16應該等於'「」'(並且第一行被假定爲一個標題,即它不被評估) –

+0

我加入一個更清晰的例子。有了輸入和預期的輸出。 – Polucho