AWK:合并CSV文件中的列

时间:2015-11-05 16:11:27

标签: awk merge gawk

文件按列7排序,它需要为具有相同ID的每组行组合字段11,12,13,14,15和16,这是第7列的值。 / p>

  

我终于解决了我的问题,感谢所有!!。

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"   ""   ""   ""   ""

1 个答案:

答案 0 :(得分:0)

澄清问题后更新: 对于所有出现的键(某列中的值),必须收集另一列中的不同值,并使用此键插入每行的一系列列中:
我们可以说,我们以制表符分隔的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"  ""  ""  ""  ""  ""

并将其第一列作为关键字。然后,任务是用C列中的所有不同值填充C-G列,例如C列中的键:

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的列的索引以及表示结束的列的索引必须指定范围