awk按列总和做组

问题描述 投票:0回答:2

我有这个csv文件,我正在尝试编写shell脚本,以便在对其进行分组后计算列的总和。列号为11(STATUS)

我的剧本是

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;
shell unix awk
2个回答
2
投票

在你的剧本中将FS更改为;

awk -F';' 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' file

COMMITTED 2

1
投票

你使用了错误的字段分隔符。使用

awk -F\;

必须逃避;以将其用作文字。除此之外,您的方法似乎没问题。


除了awk,你也可以使用

tail -n +2 $f | cut -f11 -d\; | sort | uniq -c

要么

datamash --header-in -t \; -g 11 count 11 < $f

做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.