【发布时间】:2015-09-08 14:14:55
【问题描述】:
给定一个 CSV 文件:
id, fruit, binary
1, apple, 1
2, orange, 0
3, pear, 1
4, apple, 0
5, peach, 0
6, apple, 1
我如何计算水果中的每个唯一值,
二进制值=1的次数/出现次数 水果列中出现的水果 ?
另一种方法是对每个唯一水果的二进制列的值求和。
例如:
对于水果苹果,它以二进制 = 1 出现两次,频率为 3。因此我将得到 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
在纠正我的语法和合并 2 个 awk 代码方面需要帮助
【问题讨论】:
-
我认为这个问题的答案可能会有所帮助stackoverflow.com/questions/1450085/…
标签: linux shell command-line awk sed