Как вывести, если совпадение присутствует, и оставить, если нет, с помощью awk

Как вывести, если совпадение присутствует, и оставить, если нет, с помощью awk

У меня есть файл результата A.tsv(разделитель = \t):

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

И файл с образцом информации B.tsv(разделитель = \t):

BC01
BC04
BC02
BC03
BC05

И я хочу добавить A.tsv(но распечатать в новом файле) образец, которого не хватает в B.tsv:

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

До сих пор я пробовал некоторые команды awk, но ничего не вышло:

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

Вы знаете, как это сделать?

решение1

Правильным подходом к обработке этих файлов было бы декодирование A.tsvв словарь с ключом $1, сохранение содержимого всей строки и последующее его использование B.tsvдля поиска значений, например

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

Если вы хотите, чтобы конечный результат был отсортирован по $1, то вам может потребоваться индексировать содержимое обоих файлов и обработать его окончательно, выведя ENDтолько ключ, если значение отсутствует.

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

Связанный контент