我有一个文件,其输入如下
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
但是它仅打印计数,$ 2的值,但其他列的详细信息没有显示为所需的输出,请帮助我
答案 0 :(得分: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循环作为计数器逐步执行。计数器会在输入流中保留“新”键的原始顺序。