parsing - 使用多个参数解析 - awk
问题描述
我无法解析 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
输入
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";
我得到错误的输出
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";
解决方案
这是条件句的正确形式。但是,它只有一个匹配的记录:
$ 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
ie 记录。使用逻辑或),但这会带来一个额外的记录:
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
推荐阅读
- java - 为什么我不能将类型参数添加到覆盖方法?
- python - OSError:无法在 Python 中打开资源(词云)
- angular - Primeng:与表格和其他元素的对话框中表格滚动条的高度错误
- python - Pyinstaller,.exe 文件什么都不做
- arduino-nano - Arduino 编译错误“___vector_11 的多重定义”
- python - 如何使用 numpy 减少 for 循环的使用?
- azure - Azure Maps - 看不到地图
- python - 如果另一个会话已经打开,SQLAlchemy .commit() 会成功但没有效果
- javascript - 显示重复的 HTML?
- sql - Oracle 12.2 中使用 BIND 变量和 OR 条件的 QUERY 性能问题