我正试图找出用awk(不是很熟悉awk)解决这个问题的正确方法,但我似乎无法得到它。
基本上我有一个包含两列的文本文件。我想总结第二列,然后将第二列的每个条目除以总和,并在结果小于0.25时递增计数器。为了做到这一点,似乎我必须循环两次,一次得到总和,一次用总和来评估每个条目。我怎么能用一个班轮来解决这个问题呢?
Example Input:
0 5
1 5
2 10
3 5
Example Output:
3 (the sum is 25 and three of the entries result in a value less than 0.25 when divided by 25)
我试图在bash中尝试这样做,并意识到我需要使用awk来处理小数。我可以循环并得到总和并循环并对每个条目进行条件检查,但我不明白如何同时进行这两个。
答案 0 :(得分:2)
awk '
{ sum+=$2 ; row[NR]=$2 }
END{ for(i=1;i<=NR;i++) if (row[i]/sum < 0.25) {counter+=1}; print counter }
' file
答案 1 :(得分:0)
使用awk
$ awk '{sum+=$2;a[NR]=$2}END{for (i in a) if (a[i]/sum<0.25) count++;print count}' file
sum+=$2
获取第2列的摘要并保存到sum
a[NR]=$2
将第2列记录到数组a
中(NR,行号,作为索引)i in a
逐个从数组a
获取索引if (a[i]/sum<0.25) count++
使用条件(&lt; 0.25)