使用bash计算.csv中类别中的名称数

时间:2018-04-17 08:12:14

标签: bash csv sh

我想根据类别

计算.csv档案中的学生人数

第1类是名称,第2类是国家,第3类是城市

.csv文件显示如下:

sort -k3 -t; students.csv

我已经尝试过我的.sh脚本,但它无法正常工作

cat students.csv | ./script.sh NYC

编辑

我正在尝试创建一个按城市计算学生的bash脚本,以及通过执行脚本(例如

)来计算一个城市的东西
    protected override void OnCreate(Bundle bundle) 
    {
        base.OnCreate(bundle);
        AndroidEnvironment.UnhandledExceptionRaiser += HandleAndroidException;

终端只显示来自纽约的学生

3 个答案:

答案 0 :(得分:0)

如果我理解你的话,这样的话?

cut -d";" -f3 mike.txt | sort | uniq -c 

(抱歉,第一次错误的解决方案 - 现在更新)

只统计一个城市:

cut -d&#34 ;;&#34; -f3 mike.txt | grep&#34; NYC&#34; | wc -l <​​/ p>

根据文件的大小,您进行此操作的频率等等,查看其他解决方案可能是明智的,例如。 AWK。但是这个解决方案可以正常工作。

答案 1 :(得分:0)

错误消息的原因&#34;排序:多角色标签&#39; students.csv&#39;&#34;你还没有给-t选项分隔字符。如果在-t之后添加分号,则排序将按预期工作:

sort -k3 -t';' students.csv

答案 2 :(得分:0)

总有awk:

$ awk -F\; 'a[$1]++==0{c++}END{print c}' file
3

一旦您更全面地描述了您的要求,(计算名称sort -k3。请更新OP,我们可以帮助您更好。

编辑以符合您的更新:

$ awk -F\; -v col=3 -v val=NYC '
(length(val) && $col==val) || length(val)==0 && a[$col]++==0 {
    c++
}
END { print c }
' file
1

如果您使用您要查找的值设置-v val=,并使用列号设置-v col=,则会计算valcol的出现次数。您设置colval未设置col中的不同值。