AWK:合并 CSV 文件中的列

AWK: Merge columns in a CSV file

文件按第7列排序,需要合并字段11、12、13、14、15、16,每组ID相同的行,即第7列的值.

I finally solved my problem alone, thanks to all!!.

What I have done:

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

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

        b[]=b[]"|""\t""\t""\t";
        c[]=c[]"|""\t""\t""\t""\t""\t""\t""\t""\t""\t";
    }

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"        

What I get with my script. In the output lines are doubled.

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

问题澄清后更新: 对于所有出现的键(特定列中的值),必须收集另一列中的不同值,并将其插入到具有该键的每一行的一系列列中:
比方说,我们的制表符分隔 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 列的键:

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 [=12=]}
    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 和表示结束的列的索引必须指定范围