gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:11:58 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com