awk选择科学符号的值

  • 本文关键字:符号 选择 awk awk
  • 更新时间 :
  • 英文 :


亲爱的生物信息学家,

我在awk和科学值表示法上有一个问题。

我想使用awk根据$5的最小值选择行,只保留$1的一个ID::

Chrpa1_10100    2434    PF00063 des 3.9E-21 IPR001609   
Chrpa1_10100    2434    PF03547 des 4.5E-7  IPR004776   
Chrpa1_10100    2434    PF07857 des 3.3E-7  IPR012435   
Chrpa1_10100    2434    PF13516 des 0.085   IPR001611   

在这个例子中,我想要:

Chrpa1_10100 2434 PF00063 des 3.9E-21 IPR001609

如果我做:

cat file |sort -k1,1|uniq| awk -F't' '$5 > max[$1] { max[$1]=$5; row[$1]=$0 } END { for (i in row) print row[i] }'

但是我想要这个:

Chrpa1_10100 2434    PF13516 des 0.085   IPR001611

提前谢谢你

欢呼

我的命令行给我这个:Chrpa1_10100 2434 PF13516 des 0.085IPR001611,但我想要这个Chrpa1_10100 2434 PF00063 des 3.9E-21IPR001609

下列数字

3.9E-21 4.5E-7 3.3E-7 0.085

3.9E-21最小,0.085是最大的,这段代码

awk -F't' '$5 > max[$1] { max[$1]=$5; row[$1]=$0 } END { for (i in row) print row[i] }'

选择最大的数,因此与0.085一致。如果您想要3.9E-21,您需要实现查找最小值,但请记住,虽然未知的平均零对于查找正数的最大值很好,但它不是最小值,因此我建议以下改进

awk -F't' '!($1 in min)||($5 < min[$1]){ min[$1]=$5; row[$1]=$0 } END { for (i in row) print row[i] }'

解释:改变maxmin><和改变条件是真的如果没有关键$1$5数组或价值小于最小值在min关键$1

file.txt内容为

Chrpa1_10100 2434 PF00063 des 3.9E-21 IPR001609
Chrpa1_10100 2434 PF03547 des 4.5E-7 IPR004776
Chrpa1_10100 2434 PF07857 des 3.3E-7 IPR012435
Chrpa1_10100 2434 PF13516 des 0.085 IPR001611

然后

awk '!($1 in min)||($5 < min[$1]){ min[$1]=$5; row[$1]=$0 } END { for (i in row) print row[i] }' file.txt

给输出

Chrpa1_10100 2434 PF00063 des 3.9E-21 IPR001609

(在gawk 4.2.1中测试)

相关内容

  • 没有找到相关文章

最新更新