【问题标题】:Awk OR conditional not workingawk 或有条件的不工作
【发布时间】:2018-05-24 22:22:12
【问题描述】:

输入:制表符分隔的输入文件,有 15 列,其中第 15 列是整数。

输出:满足条件的行数。

我的代码:

$ closest-features --closest --no-overlaps --delim '\t' --dist --ec megatrans_enhancers.sorted.bed ../../data/alu_repeats.sorted.bed | awk -v OFS='\t' '{if ($15 <= 1000 || $15 >= -1000) print $0}' | wc -l
1188

||在这种情况下,条件语句无法正常工作(文件中的总行数为 1188 行,并且我确定至少有些行不满足条件),因为如果我删除 OR 条件语句,那么它突然就可以工作了:

$ closest-features --closest --no-overlaps --delim '\t' --dist --ec megatrans_enhancers.sorted.bed ../../data/alu_repeats.sorted.bed | awk -v OFS='\t' '{if ($15 <= 1000) print $0}' | wc -l
926

不知道我做错了什么。有什么建议吗?

Awk 命令输入示例:

chr1    378268  378486  chr1-798_Enhancer       17.2    +       chr1    375923  376219  AluY|SINE|Alu-HOMER529  0       +       E:375923        0.044   -2050
chr1    1079471 1079689 chr1-929_Enhancer       14.6    -       chr1    1071271 1071563 AluSx1|SINE|Alu-HOMER1669       0       -       E:1071271       0.13    -7909
chr1    1080259 1080477 chr1-830_Enhancer       16.7    -       chr1    1071271 1071563 AluSx1|SINE|Alu-HOMER1669       0       -       E:1071271       0.13    -8697
chr1    6611744 6611962 chr1-241_Enhancer       46.6    +       chr1    6611431 6611723 AluSc|SINE|Alu-HOMER10257       0       +       E:6611431       0.089   -22
chr1    6959639 6959857 chr1-58_Enhancer        100.1   -       chr1    6966612 6966911 AluSx|SINE|Alu-HOMER11041       0       -       E:6966612       0.137   6756
chr1    6960593 6960811 chr1-202_Enhancer       51.6    -       chr1    6966612 6966911 AluSx|SINE|Alu-HOMER11041       0       -       E:6966612       0.137   5802
chr1    7447888 7448106 chr1-2_Enhancer 181.9   -       chr1    7449489 7449799 AluSz|SINE|Alu-HOMER11879       0       +       E:7449489       0.119   1384
chr1    10752461        10752679        chr1-131_Enhancer       65.4    -       chr1    10752754        10753065        AluSq2|SINE|Alu-HOMER19455      0       +       E:10752754      0.106      76
chr1    12485694        12485912        chr1-353_Enhancer       36.7    +       chr1    12487328        12487634        AluSx3|SINE|Alu-HOMER23581      0       +       E:12487328      0.085      1417
chr1    12486469        12486687        chr1-141_Enhancer       63.6    +       chr1    12487328        12487634        AluSx3|SINE|Alu-HOMER23581      0       +       E:12487328      0.085      642

【问题讨论】:

    标签: awk


    【解决方案1】:

    尝试设置&amp;&amp; 条件,因为数字应大于-1000 且小于1000

    Your_command | awk '$15<=1000 && $15>=-1000{count++} END{print count}'
    

    在上面的awk 中添加-F"\t",以防您的输入也以TAB 分隔。在awk 之后也不需要使用wc -l。我已经为此编写了逻辑,因此通过创建一个名为 count 的变量并在 Input_file 的最后打印它来给出满足条件的行数。

    此外,对于您提供的示例输出,3 我认为这是正确的。

    【讨论】:

    • 这确实解决了问题,也很有意义。谢谢!
    • @dddxxx,很高兴它对你有帮助,干杯和快乐学习:)
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多