Как извлечь значения, которые меньше 0 и точки, из определенных столбцов и вывести всю строку с помощью awk

Как извлечь значения, которые меньше 0 и точки, из определенных столбцов и вывести всю строку с помощью awk

У меня есть файл с разделителями табуляции, я хочу извлечь «экзонические» записи из 2-го столбца, «несинонимичные SNV» записи из 3-го столбца и значения, которые меньше (<1) и точки (.) из столбцов 4-го, 5-го, 7-го.

Chr     Func.refGene    ExonicFunc.refGene  1000g2015aug_eas 1000g2015a avsnp147    ExAC_ALL
chr1    intergenic      synonymous SNV      .                .          .           .
chr1    exonic          nonsynonymous SNV   1.2              .          .           .
chr2    exonic          nonsynonymous SNV   0.246            .          rs2022      0.4061
chr2    intronic        synonymous SNV      .                0.7386     rs2289093   0.7275
chr2    exonic          nonsynonymous SNV   0.6131           0.7376     rs227       0.7167
chr2    intergenic      nonsynonymous SNV   .                0.231      .           .
chr3    exonic          synonymous SNV      0.2192           0.2376     rs230       0.2205
chr3    intergenic      nonsynonymous SNV   2.01             0.2376     rs230       0.2204

Ожидаемый результат

chr2    exonic  nonsynonymous SNV   0.246   .       rs2289195   0.4061
chr2    exonic  nonsynonymous SNV   0.6131  0.7376  rs2276599   0.7167

Ниже приведен код, который я написал. awk -F'\t' '$2~/exonic/ && $3~/nonsynonymous SNV/ && $4~/^0/ && $5~/^0/ && $7~/^0/{print $0}' inputfile.txt >> outputfile.txtОн извлекает записи, начинающиеся с нуля (что меньше 1) из столбцов 4, 5 и 7, но я не знаю, как извлечь записи, которые меньше 1 и точки (.)

решение1

Вместо тестов с использованием регулярных выражений я бы предложил сравнение строк для строк и числовое сравнение для чисел, т.е.

$2 == "exonic"

и

$4+0 < 1

( +0силы числового, а не лексического сравнения). Помимо этого, это просто вопрос правильной логики:

$ awk -F'\t' '$2 == "exonic" && $3 == "nonsynonymous SNV" && ($4+0 < 1 || $4 == ".") && ($5+0 < 1 || $5 == ".") && ($7+0 < 1 || $7 == ".")' inputfile.txt
chr2    exonic  nonsynonymous SNV   0.246   .   rs2022  0.4061
chr2    exonic  nonsynonymous SNV   0.6131  0.7376  rs227   0.7167

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