Как сравнить два столбца из двух файлов с определенным условием в awk

С помощью 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

1
03.03.2021, 09:28
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 должен быть уникальным, иначе он всегда будет возвращать последнее значение.

0
18.03.2021, 22:27

Теги

Похожие вопросы