单独文件中的列匹配

单独文件中的列匹配

我有两个文件。我想将第一部分第二列中的逗号分隔值File1与第一列中的值匹配File2并写入File2.我该怎么做awk

文件1

Column1    Column2
A          G1,G2
B          G4,G1

文件2

G1
G2

期望的结果

Column1    Column2
G1         A,B
G2         A

答案1

尝试这个

awk '
  NR==1 {
    print;
    next;
  }
  NR==FNR {
   split($2,a,","); 
   for(i in a) b[a[i]] = b[a[i]]==""? $1 : b[a[i]] "," $1;
   next;
  }
  {
    if ($1 in b) print $1 "\t" b[$1];
  }
  ' File1 File2

如果您没有/不需要标题行,您可以通过删除第一个规则/操作对来简化。

答案2

perl -nE ' chomp; 
   ($a,@b)= split(/[\t,]/,$_); 
   for(@b){ $aux{$_}.= ",$a" } 
   say "$_$aux{$_}" =~ s/,/\t/r  unless @b
   ' file1 file2

(好吧,好吧,我更喜欢@steeldriver版本)

相关内容