анализ с использованием нескольких параметров - Awk - PullRequest
0 голосов
/ 22 мая 2018

У меня проблемы с анализом файла GFF.Я использую код ниже, как один вкладыш.Я получаю выходные данные, отфильтрованные на основе столбца 1 (1 доллар США), но когда я добавляю дополнительный фильтр больше 5000, но меньше 150000, awk не фильтрует мой файл надлежащим образом.Я что-то неправильно понимаю, и я не совсем уверен, что это такое.

awk '{ $1 = "s10"; 
$4 >= 50000 && $4 <=150000; 
print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6""\t"$7"\t"$8"\t"$9}' infile > outfile 

input

S03       GeneWise        mRNA    7000       84000     40.00   -       .       ID=NA;Source=NA;Function="NA";
S07       GeneWise        CDS     80450       96070     .       -       0       Parent=NA;
S10       GeneWise        mRNA    96000       105032     50.00   -       .       ID=NA;Source=NA;Function="NA";
S10       GeneWise        CDS     43800       76000     .       -       0       Parent=NA;
S10      GeneWise        mRNA    175032       190540     41.11   +       .       ID=NA;Source=NA;Function="NA";
S11       GeneWise        CDS     3700       15000     .       +       0       Parent=NA;
S15       GeneWise        mRNA    18055       25000     40.00   -       .       ID=S15;Source=NA;Function="NA";

output, который я получаю с ожидаемой ошибкой

S10       GeneWise        mRNA    96000       105032     50.00   -       .       ID=NA;Source=NA;Function="NA";
S10       GeneWise        CDS     43800       76000     .       -       0       Parent=NA;
S10      GeneWise        mRNA    175032       190540     41.11   +       .       ID=NA;Source=NA;Function="NA";

вывод

S10       GeneWise        mRNA    96000       105032     50.00   -       .       ID=NA;Source=NA;Function="NA";

1 Ответ

0 голосов
/ 22 мая 2018

Это правильная форма для условного.Однако для него существует только одна подходящая запись:

$ awk ' 
$1 == "S10" && $4 >= 50000 && $4 <=150000 { 
    print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9
}' file
S10     GeneWise        mRNA    96000   105032  50.00   -       .       ID=NA;Source=NA;Function="NA";

, если только вы не хотите записей с $1 == "S10" || $4 $4 >= 50000 && $4 <=150000, т.е.используя логическое ИЛИ), но это принесло бы одну дополнительную запись:

awk ' 
$1 == "S10" || $4 >= 50000 && $4 <=150000 { 
    print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9
}' file
S07     GeneWise        CDS     80450   96070   .       -       0       Parent=NA;
S10     GeneWise        mRNA    96000   105032  50.00   -       .       ID=NA;Source=NA;Function="NA";
S10     GeneWise        CDS     43800   76000   .       -       0       Parent=NA;
S10     GeneWise        mRNA    175032  190540  41.11   +       .       ID=NA;Source=NA;Function="NA";

Лучшая форма первой:

$ awk ' 
BEGIN { OFS="\t" }                           # define OFS to \t
$1 == "S10" && $4 >= 50000 && $4 <=150000 { 
    $1=$1                                    # rebuild the record
    print                                    # output
}' file
...