我有一个包含以下输入的文件
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/