別々のファイルでの列のマッチング

別々のファイルでの列のマッチング

2 つのファイルがあります。 の最初の部分の 2 番目の列のカンマ区切りの値を の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 バージョンのほうが好きです)

関連情報