awk按列总和进行分组

时间:2018-09-06 16:04:59

标签: shell unix awk

我有这个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;

2 个答案:

答案 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

做同样的事情。