( modificando da minha resposta aqui ... )
Você pode comparar NR
com FNR
para distinguir entre processar o primeiro ou os arquivos subseqüentes. Isso ocorre porque FNR
é redefinido por arquivo, enquanto NR
é a contagem em execução. Portanto, somente durante o processamento do primeiro arquivo a condição NR==FNR
será satisfeita.
Para processar o FileB primeiro ...
awk 'NR==FNR{a[$1]=1}'
Definir o valor como "fictício" como 1
é bom o suficiente.
Depois, para processar o FileA ...
awk -F'\t' 'BEGIN{OFS=FS}NR!=FNR{if(a[$4]){$1="Reserved"};print}'
Aqui, o separador do campo de saída OFS
é definido como FS
para preservar a formatação quando awk
reconstruir a linha completa ( $0
).
Colocando os dois juntos:
awk -F'\t' 'BEGIN{OFS=FS}NR==FNR{a[$1]=1}NR!=FNR{if(a[$4]){$1="Reserved"};print}' FileB FileA
Se você quer que ele seja um pouco mais terse ...
awk -F'\t' 'BEGIN{OFS=FS}NR==FNR{a[$1]=1;next}a[$4]{$1="Reserved"}1' FileB FileA
next
é usado no processamento do arquivo primeiro para pular a impressão final indicada por (o final) 1
, que é um atalho de {print $0}
. Com isso, podemos mudar a condição a[$4]
(ou seja, true
se existir em r
) 'out' para ser a condição para determinar se precisamos alterar $1
para "Reserved"
ou não.