计算计我有一些表格数据,其中第一场是一个独特的ID,第二个观察,如:AWK,从表格数据
1 2
2 2
3 5
4 3
5 2
6 2
如何使用awk来计算第二场的频率。在得到的例子中(观察计数):
2 4
3 1
5 1
我不知道哪些观察结果发生在手前(即0,1和4在本例中没有发生)。我虽然我需要建立一个关联数组,其中可以添加条目,并在发现观察值时将值增加1,但我真的(诚实地)不知道如何做到这一点?
计算计我有一些表格数据,其中第一场是一个独特的ID,第二个观察,如:AWK,从表格数据
1 2
2 2
3 5
4 3
5 2
6 2
如何使用awk来计算第二场的频率。在得到的例子中(观察计数):
2 4
3 1
5 1
我不知道哪些观察结果发生在手前(即0,1和4在本例中没有发生)。我虽然我需要建立一个关联数组,其中可以添加条目,并在发现观察值时将值增加1,但我真的(诚实地)不知道如何做到这一点?
$ awk '{cnt[$2]++} END{for (i in cnt) print i, cnt[i]}' file
2 4
3 1
5 1
由于运算符in
以上的输出顺序实际上是随机的。如果你想用GNU awk控制它,你只需在进入循环之前设置顺序(参见https://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning)。例如:
要根据数字升序阵列索引排序(事实上,它是相同的顺序与上述是巧合):
$ awk '{cnt[$2]++} END{PROCINFO["sorted_in"]="@ind_num_asc"; for (i in cnt) print i, cnt[i]}' file
2 4
3 1
5 1
为了通过数字升序数组值进行排序:
$ awk '{cnt[$2]++} END{PROCINFO["sorted_in"]="@val_num_asc"; for (i in cnt) print i, cnt[i]}' file
3 1
5 1
2 4
啊真的很好 - 我将不得不学习awk的数组。我有一些伪代码。 – user3375672
请尝试以下方法:
cat file.txt | awk '{
dict[$2]++;
}
END {
for (key in dict) { print key, dict[key] }
}'
这与Ed的答案完全一样...... –
随着perl
它是一个LITT乐更容易地将钥匙进入你目前的排序顺序:
$ perl -lane '$seen{$F[1]}++; END{ for (sort keys %seen){ print "$_ $seen{$_}"}}' file
2 4
3 1
5 1
或者,如果你想通过频率排序:
$ perl -lane '$seen{$F[1]}++; END{ for (sort {$seen{$a} <=> $seen{$b}} keys %seen){ print "$_ $seen{$_}"}}' file
3 1
5 1
2 4
(反向$a
和$b
如果你想降频VS升频.. )
通过在使用in操作符循环前定义排序顺序PROCINFO [“sorted_in”] = ...',您可以在GNU awk中做同样的事情,请参阅https ://www.gnu.org/software/gawk/manual/gawk.html#Controlling-扫描预定义的排序顺序。我更新了[我的回答](http://stackoverflow.com/a/43850931/1745001)以表明这一点。 –
糟糕,你忘了发布你的代码! StackOverflow是关于帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码更好。即使你不知道如何编写它,甚至元代码也会演示你如何看待程序应该起作用。 – ghoti
是的,我知道 - 刚开始我真的感到难堪。 – user3375672