2017-11-30 17 views
0

複数の行と26の列を持つファイルがあります。私は各行(最初の2つの列を除く)で0より大きい値の出現回数を数えたいと思います(0とは違うと思います)。すべてのローからxより大きい数値の出現数をカウントします。

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

のawkやsedのが良いでしょう:私はこのような出力ファイルが持っていると思い

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 

:ファイルには、次のようになります。

私は同様の質問を見ましたが、その場合は列が合計され、望ましい出力が異なります。

答えて

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

はやるべきこと

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 
関連する問題