Cómo imprimir si coincide presente y salir si no con awk

Cómo imprimir si coincide presente y salir si no con awk

Tengo un archivo de resultados A.tsv(separador = \t):

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

Y un archivo con información de muestra B.tsv(separador = \t):

BC01
BC04
BC02
BC03
BC05

Y quiero agregar A.tsv(pero imprimir en un archivo nuevo) la muestra que falta en B.tsv:

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

Hasta ahora probé algún comando awk pero nada concluyente:

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

Sabes como hacer esto ?

Respuesta1

Un enfoque correcto para procesar estos archivos sería decodificarlos A.tsven un diccionario con la clave $1, almacenar el contenido de toda la línea y luego usarlo más adelante B.tsvpara buscar los valores, es decir

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

Si desea que el resultado final esté ordenado por $1, es posible que deba indexar el contenido de ambos archivos y procesarlo finalmente imprimiendo ENDla clave sola si el valor no está 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

información relacionada