Spaltenabgleich in separaten Dateien

Spaltenabgleich in separaten Dateien

Ich habe zwei Dateien. Ich möchte durch Kommas getrennte Werte in der zweiten Spalte im ersten Teil von File1mit den Werten in der ersten Spalte in abgleichen File2und in die schreiben File2. Wie mache ich das inawk

Datei1

Column1    Column2
A          G1,G2
B          G4,G1

Datei2

G1
G2

Erwünschtes Ergebnis

Column1    Column2
G1         A,B
G2         A

Antwort1

Versuche dies

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

Wenn Sie die Kopfzeile nicht haben/benötigen, können Sie die Vereinfachung durchführen, indem Sie das erste Regel-/Aktionspaar weglassen.

Antwort2

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

(ok, ok, ich bevorzuge die Version von @steeldriver)

verwandte Informationen