Arrays 使用awk连接文件操作

Arrays 使用awk连接文件操作,arrays,linux,bash,awk,Arrays,Linux,Bash,Awk,我有一个3600万个数字的基本文件,列号为SERIALNO和nno,另一个文件的数据少于或等于3600万个,第一个公共SERIALNO列类似于基本文件,列号为m,所有数据用coma分隔 我需要将basefile第1列与文件第1列匹配,并输出serialnumber、column basefile:1、…、basefile:n、column file:1、…、column file:m,如果文件中没有basefile数据,还需要捕获该值 我也尝试过join命令和grep命令,但处理大文件的速度非常

我有一个3600万个数字的基本文件,列号为SERIALNOnno,另一个文件的数据少于或等于3600万个,第一个公共SERIALNO列类似于基本文件,列号为m,所有数据用coma分隔

我需要将basefile第1列与文件第1列匹配,并输出serialnumber、column basefile:1、…、basefile:n、column file:1、…、column file:m,如果文件中没有basefile数据,还需要捕获该值

我也尝试过join命令和grep命令,但处理大文件的速度非常慢。任何机构都可以提出任何其他替代方案

我认为awk对于文件操作来说要快得多

基本文件

serialno1,a,b,c,d
serialno2,a1,b2,c2,d2
serialno3,a3,b3,c3,d3
文件

serialno1,e,f,g,h
serialno2,e1,f2,g2,h2
serialno4,e4,f4,g4,h4
预期产量

serialno1,a,b,c,d,e,f,g,h
serialno2,a1,b2,c2,d2,e1,f2,g2,h2
serialno3,a3,b3,c3,d3,,,,,

要从文件2中删除非重复值,请使用以下命令:

awk -F ',' '{  if (NR==FNR){
                       r[$1]=$0
               }else{
                       if($1 in r){
                             r[$1]=r[$1]gensub($1,"",1)
                       }else{ 
                             r[$1]=r[$1] ",,,"
                       }
               }
             }END{
                       for(i in r){print r[i]}
             }' infile infile2  |
awk -F ',' 'a="";NF<8{a=",,,"}
            {printf("%s%s%s",$0,a,RS)}' 
awk-F',''{if(NR==FNR){
r[$1]=$0
}否则{
如果(1美元,卢比){
r[$1]=r[$1]gensub($1,“,1)
}否则{
r[$1]=r[$1]
}
}
}结束{
对于(i in r){print r[i]}
}'填充填充2|
awk-F','a=“”;你可以试试看

awk 'BEGIN{FS=OFS=","}
    FNR==NR{d[$1]=substr($0,index($0,",")+1); next}
    {print $0, ($1 in d?d[$1]:",,,,")}' file base_file 
你得到

serialno1,a,b,c,d,e,f,g,h
serialno2,a1,b2,c2,d2,e1,f2,g2,h2
serialno3,a3,b3,c3,d3,,,,,

嗨,伙计,它正在工作,但有一个问题,比如我在输出中也得到了serialno4,e4,f4,g4,h4,我不希望任何值不在基本文件中。它就像被遗漏的join-->A-B+AUBThanks都德,它工作得很好,我还需要一个帮助,你能做什么,文件2有固定的列号,比如m。那么多的字段可以添加到输出序列no3、a3、b3、c3、d3、、、简单的逗号分隔符或伪字符中value@ArunBinoy添加了请求。现在有班级在分发作业吗?这完全是一个骗局。