我有这个csv文件,在对它进行分组后,我试图编写shell脚本来计算列的总和。列号为11(状态)
我的脚本是
awk -F, 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' $f > $parentdir/outputfile.csv;
预期文件输出为
COMMITTED 2
但实际输出仅为2。
它仅打印计数,而不打印总和。如果我删除任何其他列并运行相同的查询,则可以正常工作,但不适用于以下示例数据。
FILE NAME;SEQUENCE NR;TRANSACTION ID;RUN NUMBER;START EDITCREATION;END EDITCREATION;END COMMIT;EDIT DURATION;COMMIT DURATION;HAS DEPENDENCY;STATUS;DETAILS
Buldhana_Refinesource_FG_IW_ETS_000001.xml;1;4a032127-b20d-4fa8-9f4d-7f2999c0c08f;1;20180831130210345;20180831130429638;20180831130722406;140;173;false;COMMITTED;
Buldhana_Refinesource_FG_IW_ETS_000001.xml;2;e4043fc0-3b0a-46ec-b409-748f98ce98ad;1;20180831130722724;20180831130947144;20180831131216693;145;150;false;COMMITTED;
答案 0 :(得分:2)
在脚本中将FS
更改为;
awk -F';' 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' file
COMMITTED 2
答案 1 :(得分:1)
您使用了错误的字段分隔符。使用
awk -F\;
;
必须转义以将其用作文字。除此之外,您的方法似乎还可以。
除了awk,您还可以使用
tail -n +2 $f | cut -f11 -d\; | sort | uniq -c
或
datamash --header-in -t \; -g 11 count 11 < $f
做同样的事情。