【问题标题】:sorted in order of decreasing frequency按频率降序排列
【发布时间】:2021-03-27 23:48:38
【问题描述】:

我希望能够按频率递减的顺序显示输出。如果两个或多个密码子具有相同的频率,则脚本应使用密码子的字母顺序打破平局。在这个例子中,cag 和 gtt 都只出现一次,但是因为 c 在 g 之前,所以 cag 在上面的 gtt 之前。

当我运行我的脚本时

cat test
aacgtttgtaaccagaactgt
./histogram test
3 aac 
1 gtt 
2 tgt 
1 cag 

但相反,我希望能够做到

./histogram test
3 aac

2 tgt

1 cag

1 gtt

我做了什么

declare -a codons=(aac gtt tgt cag)

for items in  ${codons[@]}
do

        count=$( grep -o $items $1  | sort  -k1,1nr -k2,2 | wc -l)

     # count=$( grep -o $items $1 | uniq -c | wc -l | sort  -k1,1nr -k2,2  )
        echo "$count $items "
done

【问题讨论】:

    标签: bash shell unix grep


    【解决方案1】:

    只需对输出进行排序。

    ./histogram test | sort -k1,1nr -k2,2
    

    如果您想将sort 包含到您的脚本中,您可以在循环的done 之后附加它:

    ...
    done | sort -k1,1nr -k2,2
    

    顺便说一句:sort | wc -l 是浪费时间,因为sort 不会改变行数。只需使用wc -l

    对于./histogram test this should print 的示例输出

    3 aac
    2 tgt
    1 cag
    1 gtt
    

    【讨论】:

    • 仅文件作为参数,但我不应该在命令行中传递任何其他参数或命令
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2011-01-31
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2017-11-05
    相关资源
    最近更新 更多