
У меня есть два файла. Я хочу сопоставить разделенные запятыми значения во втором столбце в первой части 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)