我有一个包含多行和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会很好。
我看到了类似的问题,但在这种情况下,列被求和,所需的输出不同。
答案 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