
Ich habe zwei Dateien. Ich möchte durch Kommas getrennte Werte in der zweiten Spalte im ersten Teil von File1
mit den Werten in der ersten Spalte in abgleichen File2
und 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)