linux - 使用 awk 计算文件中特定列的出现次数

标签 linux file unix awk count

我有一个包含以下输入的文件

1,1_2_34_45.csv,2345
2,1_2_34_45.csv,2345
3,1_2_34_45.csv,2345
4,1_2_34_46.csv,2346
5,1_2_34_47.csv,2345

为此我需要下面的内容

1_2_34_45.csv,2345,3
1_2_34_46.csv,2346,1
1_2_34_47.csv,2345,1

我试过下面的代码

 awk -F , '{a[$2]++ }END{for(i in a){print i,a[i]}}' table.txt > count.txt

但它只打印计数,值(value) 2 美元,但其他列的详细信息未按预期输出显示,请帮助我

最佳答案

在数组键中存储您想要的值可能就足够了。

$ awk -F, '{a[$2 FS $3]++} END {for(i in a){print i,a[i]}}' OFS=, input.txt
1_2_34_47.csv,2345,1
1_2_34_46.csv,2346,1
1_2_34_45.csv,2345,3

请注意,使用如此简单的 awk 脚本,无法保证输出顺序。 (即不保证数组顺序。)如果你想控制顺序,你最好使用额外的数组:

$ awk -F, '{k=$2 FS $3} !a[k]++{o[i++]=k} END {for(j=0;j<i;j++){print o[j],a[o[j]]}}' OFS=, input.txt
1_2_34_45.csv,2345,3
1_2_34_46.csv,2346,1
1_2_34_47.csv,2345,1

第二个数组有一个递增键,我们可以使用 for 循环作为计数器逐步执行。计数器保留输入流中"new"键的原始顺序。

关于linux - 使用 awk 计算文件中特定列的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51884697/

相关文章:

unix - 如何查看Ansible运行的Unix命令?

linux - 如何制作 bash 脚本

python - 如何将数据添加到二进制文件中?

linux - unix排序问题

c - 文件的多线程

.net - Process.Start 一个没有扩展名的文件

mysql - 如何在数据库中存储唯一文件路径,对于唯一键来说太长了

python - Virtualenv 使用了错误的 python,即使它位于 $PATH 中的第一个

linux - 获得独特的线条

linux - Ubuntu 上最小化/图标化 JavaFX 未修饰阶段不起作用