我正在寻找一种方法来计算字段中的值出现在 csv 文件中的一系列字段中的次数,这与 excel 中的 countif 非常相似,尽管我想尽可能使用 awk 命令。
所以第 1 列应该有值的范围,第 2 列会有值出现在第 1 列中的次数
计算每个值在第一列中出现的次数,并将计数附加到每行的末尾:
$ cat file
1,2,3
1,2,3
9,7,4
1,5,7
3,2,1
$ awk -F, '{c[$1]++;l[NR]=$0}END{for(i=0;i++<NR;){split(l[i],s,",");print l[i]","c[s[1]]}}' file
1,2,3,3
1,2,3,3
9,7,4,1
1,5,7,3
3,2,1,1
另一种使用 Perl 的解决方案。
perl -F, -lane ' $kv{$F[0]}++;$kl{$.}=$_;END {for(sort keys %kl) { $x=(split(",",$kl{$_}))[0]; print "$kl{$_},$kv{$x}" }} '
借用克里斯的意见
$ cat kbiles.txt
1,2,3
1,2,3
9,7,4
1,5,7
3,2,1
$ perl -F, -lane ' $kv{$F[0]}++;$kl{$.}=$_;END {for(sort keys %kl) { $x=(split(",",$kl{$_}))[0]; print "$kl{$_},$kv{$x}" }} ' kbiles.txt
1,2,3,3
1,2,3,3
9,7,4,1
1,5,7,3
3,2,1,1
$