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

Awk 计算每个原始数据中大于x的数字的出现次数,awk,sed,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

我有一个多行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
我希望有这样一个输出文件:

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最好

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

awk'NR==1{printf“X\tY\tResult%s”,ORS}\
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
NR>1{ 计数=0;#将每行的计数初始化为零 对于(i=3;i0){#$i扩展为$3,$4,因此哪些字段是 如果条件为真,则计数+++#递增。 } }; 打印F“%s\t%s\t%s%s”、$1、$2、计数、ORS(每行打印o/p) }"档案"

应该这样做

另一个
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
$awk'{if(NR==1)c=“Result”;
(i=3;i0)的其他值;
打印$1,$2,c;c=0}'文件|列-t
X-Y结果
a11
b a2 2
c a3 3
d d3 0