awk技术求助:统计双条件下CACTA条目数及第9列碱基总和
解决方法
直接用awk就能一次性完成条目计数和碱基覆盖数求和,不用额外调用wc,命令如下:
awk '$4=="CACTA_TIR_transposon" && $8=="CDS" {count++; sum+=$9} END {print "符合条件的条目数:" count; print "第9列碱基覆盖数总和:" sum}' inputfile
命令说明
- 核心筛选条件:
$4=="CACTA_TIR_transposon" && $8=="CDS",只有第4列和第8列同时满足指定值的行,才会执行后续统计动作 count++:每匹配到一行,计数变量自动加1,用来统计符合条件的条目总数sum+=$9:把当前行第9列的数值累加到sum变量中,实现碱基覆盖数的求和END块:等所有行处理完毕后执行,用来输出最终的统计结果
你之前命令的问题
你写的awk '{$4=="CACTA_TIR_transposon" && $8=="CDS"}' inputfile | wc -l存在语法错误:你把筛选条件放在了大括号{}里,这会让awk把它当成一个无输出的动作(仅执行比较运算),所以这个命令不会输出任何行,wc -l得到的结果应该是0。如果只想用管道计数,正确写法是去掉大括号,让条件作为匹配模式(awk默认会打印匹配模式的行):
awk '$4=="CACTA_TIR_transposon" && $8=="CDS"' inputfile | wc -l
但这种方式只能完成计数,没法实现求和,所以还是推荐用前面的单awk命令一步到位。
内容的提问来源于stack exchange,提问作者Awais Farooq
相关产品推荐
相关产品推荐

