【问题标题】:Print only '+' or '-' if string matches (with two conditions)如果字符串匹配(有两个条件),则仅打印 '+' 或 '-'
【发布时间】:2014-03-15 04:02:07
【问题描述】:

我想在我拥有的实际代码中添加两个附加条件:如果 File2 中的字段 5 大于 35 并且字段 7 大于 90,则打印 '+'。

代码:

while read -r line
do
    grep -q "$line" File2.txt && echo "$line +" || echo "$line -"
done < File1.txt '

输入文件1:

HAPS_0001
HAPS_0002
HAPS_0005
HAPS_0006
HAPS_0007
HAPS_0008
HAPS_0009
HAPS_0010

输入文件 2(制表符分隔):

Query   DEG_ID  E-value Score   %Identity   %Positive   %Matching_Len
HAPS_0001   protein:plasmid:149679  3.00E-67    645 45  59  91
HAPS_0002   protein:plasmid:139928  4.00E-99    924 34  50  85
HAPS_0005   protein:plasmid:134646  3.00E-98    915 38  55  91
HAPS_0006   protein:plasmid:111988  1.00E-32    345 33  54  86
HAPS_0007   -   -   0   0   0   0
HAPS_0008   -   -   0   0   0   0
HAPS_0009   -   -   0   0   0   0
HAPS_0010   -   -   0   0   0   0

所需的输出(制表符分隔):

HAPS_0001   +
HAPS_0002   -
HAPS_0005   +
HAPS_0006   -
HAPS_0007   -
HAPS_0008   -
HAPS_0009   -
HAPS_0010   -

谢谢!

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    这应该有效:

    $ awk '
    BEGIN {FS = OFS = "\t"} 
    NR==FNR {if($5>35 && $7>90) a[$1]++; next}
    {print (($1 in a) ? $0 FS "+" : $0 FS "-")}' f2 f1
    HAPS_0001       +
    HAPS_0002       -
    HAPS_0005       +
    HAPS_0006       -
    HAPS_0007       -
    HAPS_0008       -
    HAPS_0009       -
    HAPS_0010       -
    

    【讨论】:

      【解决方案2】:
      join file1.txt <( tail -n +2 file2.txt) | awk '
       $2 = ($5 > 35 && $7 > 90)?"+":"-" { print $1, $2 }'
      

      你不关心输出中的第二个字段,所以用输出的适当符号覆盖它。

      【讨论】:

        猜你喜欢
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 2017-07-06
        • 2014-08-28
        • 2019-03-24
        • 2019-12-26
        • 2021-05-29
        • 2020-08-18
        相关资源
        最近更新 更多