Não existe uma função geral que faça um vlookup
como uma função geral no Unix. Em vez disso, você está dando "tijolos", a partir dos quais você pode criar soluções para problemas em uma abordagem mais personalizada. Esses "tijolos" são ferramentas como grep
, awk
e sed
entre outras.
Uma das ferramentas, awk
, pode ser usada da seguinte forma:
vlookup.awk
FNR==NR{
a[$1]=$2
next
}
{ if ($1 in a) {print $1, a[$1]} else {print $1, "NA"} }
Exemplo
$ awk -f vlookup.awk file2 file1
1GR_P1:001PI 1GR_P1:001PI
:040VG_L1 NA
:001PO_L3 NA
1JPI_P1:001PO_L1 1JPI_P1:001PO_L1
1JPI_P1:001PO_L2 1JPI_P1:001PO_L2
Você pode usar o comando column
para limpar a saída:
$ awk -f vlookup.awk file2 file1 | column -t
1GR_P1:001PI 1GR_P1:001PI
:040VG_L1 NA
:001PO_L3 NA
1JPI_P1:001PO_L1 1JPI_P1:001PO_L1
1JPI_P1:001PO_L2 1JPI_P1:001PO_L2
Detalhes
O script awk
acima leva todo o conteúdo do arquivo2 para uma matriz que é indexada usando o valor como uma chave.
a[$1]=$1
Uma vez que file2
foi lido no array a
, file1
é então passado por uma linha de cada vez e uma decisão é tomada. Se o valor da primeira coluna de file1
estiver presente na matriz a
, o valor correspondente na coluna 2 de file2
será impresso junto com a coluna 1 de file1
. Se não estiver presente então a mensagem "NA" é impressa.