计算每个原始数字大于x的出现次数

时间:2017-11-30 19:46:25

标签: awk sed

我有一个包含多行和26列的文件。我想计算每行(不包括前两列)中高于0的值的出现次数(我猜也是有效的,从0开始)。该文件如下所示:

X     Y     Sample1     Sample2     Sample3 ....     Sample24
a     a1         0        7           0                 0
b     a2         2        8           0                 0
c     a3         0        3           15                3 
d     d3         0        0           0                 0 

我想要一个这样的输出文件:

X     Y       Result
a     a1         1
b     b1         2
c     c1         3
d     d1         0

awk或sed会很好。

我看到了类似的问题,但在这种情况下,列被求和,所需的输出不同。

3 个答案:

答案 0 :(得分:1)

awk 'NR==1{printf "X\tY\tResult%s",ORS} # Printing the header
      NR>1{
           count=0; # Initializing count for each row to zero
           for(i=3;i<=NF;i++){ #iterating from field 3 to end, NF is #fields
             if($i>0){ #$i expands to $3,$4 and so which are the fields
               count++; # Incrementing if the condition is true.
             }
           };
           printf "%s\t%s\t%s%s",$1,$2,count,ORS # For each row print o/p
          }' file

应该这样做

答案 1 :(得分:0)

另一个awk

$ awk '{if(NR==1) c="Result"; 
        else for(i=3;i<=NF;i++) c+=($i>0); 
        print $1,$2,c; c=0}' file | column -t

X  Y   Result
a  a1  1
b  a2  2
c  a3  3
d  d3  0

答案 2 :(得分:0)

$ awk '{print $1, $2, (NR>1 ? gsub(/ [1-9]/,"") : "Result")}' file
X Y Result
a a1 1
b a2 2
c a3 3
d d3 0