С помощью GNU datamash(и небольшой помощи отcut
):
$ datamash -Wf groupby 2 max 3 < file.txt | cut -f1-6
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1
awk 'BEGIN { FS=OFS="\t" }
NR==FNR { if($1=="40A") { cladeB=$1; mutB=$2; "nextfile" }; next }
FNR==1 && mutB{ $4="Conclusion"; }
{ mutbak=mutB; split($3, muts, ","); for(x in muts) gsub(muts[x], "", mutbak) }
{ print $0, (mutbak ~ /^[[:blank:],]*$/ && $2=="20B" )?cladeB:""}' fileB fileA
Уберите из кавычек оператор nextfile
(, который для GNU awk , затем )для чтения следующего файла, если вы не хотите продолжать обработку остальной части файлаB ; также обратите внимание, что "clade=40A
" в файле B должен быть уникальным, иначе он всегда будет возвращать последнее значение.