Com awk
leia file2
primeiro e economize $1
em seen[$1]
, em seguida, leia file1
e, se $1
não foi "visto", substitua-o por NoMatch
:
awk 'FNR==NR{seen[$1]++; next}
{(FNR==1 || ($1 in seen)) || $1="NoMatch"};1' file2 file1
Se você preferir join
, precisará de entrada classificada. Você terá que extrair o head
er de file1
first, sort
as linhas restantes e então join
o resultado com o sort
ed file2
:
{ head -n1; sort | join -j1 -a1 -e "NoMatch" -o 2.1 1.2 - <(sort file2); } <file1
e, se necessário, canalize tudo para uniq
para evitar linhas duplicadas:
{ head -n 1; sort | \
join -j1 -a1 -e "NoMatch" -o 2.1 1.2 - <(sort file2) | \
uniq; } <file1