给定CSV文件:
id, fruit, binary
1, apple, 1
2, orange, 0
3, pear, 1
4, apple, 0
5, peach, 0
6, apple, 1
如何计算水果中的每个唯一值,
二进制值的次数=1/出现次数
果列中出现的果实
?
另一种方法是对每个唯一的水果的二进制列的值求和。
例如:
对于果实苹果来说,它的出现频率为3,二进制数为1 2次。所以我会得到2/3。
我怎么能用一个有效的AWK代码来写呢?
我知道我可以这样做,从第二列中获取唯一值:
cut -d , -f2 file.csv | sort | uniq |
或
awk '{ a[$2]++ } END { for (b in a) { print b } }' file.csv
所以我的非工作代码如下所示:
cat file.csv | awk '{ a[$2]++ } END { for (b in a) if ($3==1) {sum+=$3} END {print $0 sum}'
和
awk '{ a[$2]++ } END { for (b in a) { sum +=1 } }' file.csv
在纠正我的语法和合并两个awk代码时需要帮助
最佳答案
这对你有用吗?
$ cat file.csv
1, apple, 1
2, orange, 0
3, pear, 1
4, apple, 0
5, peach, 0
6, apple, 1
$ cat file.csv|awk -F',' '{ $3 == 1 && fruit[$2]++; tfruit[$2]++ } END { for ( fr in tfruit) { print fr, fruit[fr], tfruit[fr] } }'
pear 1 1
apple 2 3
orange 1
peach 1
关于linux - AWK计数术语相对于其他列出现的次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30991625/