我希望能够按频率递减的顺序显示输出。如果两个或多个密码子具有相同的频率,则脚本应使用密码子的字母顺序打破平局。在这个例子中,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
答案 0 :(得分: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