Como imprimir se a correspondência estiver presente e sair se não estiver com o awk

Como imprimir se a correspondência estiver presente e sair se não estiver com o awk

Eu tenho um arquivo de resultado A.tsv(separador = \t):

BC01    2551    99
BC03    2547    95
BC04    2578    99
BC05    2547    97

E um arquivo com informações de amostra B.tsv(separador = \t):

BC01
BC04
BC02
BC03
BC05

E quero adicionar A.tsv(mas imprimir em um novo arquivo) a amostra que está faltando em B.tsv:

BC01    2551    99
BC02
BC03    2547    95
BC04    2578    99
BC05    2547    97

Até agora eu tentei algum comando awk, mas nada conclusivo:

awk -v OFS="\t" 'NR==FNR{a[$1]=$1;next}{print $0};NR!=FNR{a[$1]=$1;next}{print $1}' B.tsv A.tsv > C.tsv

Voce sabe como fazer isso ?

Responder1

Uma abordagem correta para processar esses arquivos seria decodificar A.tsvem um dicionário codificado por $1, armazenando o conteúdo de toda a linha e usando-o posteriormente B.tsvpara pesquisar os valores, ou seja

awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next } 
  ( $1 in arr ){ print arr[$1]; next } { print $1 }' A.tsv B.tsv

Se você quiser que o resultado final seja classificado por $1, talvez seja necessário indexar o conteúdo de ambos os arquivos e processá-lo finalmente imprimindo ENDapenas a chave se o valor não estiver presente

awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next } 
  !( $1 in arr ) { arr[$1] } END { for (x in arr) print arr[x] ? arr[x] : x }' A.tsv B.tsv

informação relacionada