awk '
FNR == NR {
# Read file1
i=$1;
sub($1 FS, "");
a[i]=$0; next;
}
(FNR < NR) && (FNR == 1) {
# add new column header to title row (first line of file1)
print $0 "exp"; next;
}
{
# Read file2 and append matching line from file1
print $0 a[$1];
}
' file2 file1
Observe que file2
é lido antes de file1
na solução acima para extrair a primeira coluna para correspondência (e, portanto, file2
é especificado antes de file1
). Além disso, esta solução usará a última correspondência em file2
(no seu exemplo, hat_160460
ocorre duas vezes em file2
).
Resultado:
file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707
hat_092950 63.875 63.2321 0.989935
Se você quiser usar a primeira correspondência em file2
, substitua a seção FNR == NR
acima por
FNR == NR {
# Read file1
i=$1;
sub($1 FS, "");
if (! a[i]) a[i]=$0;
next;
}
Resultado:
file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401
hat_092950 63.875 63.2321 0.989935