
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 バージョンのほうが好きです)