我有这个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;
在你的剧本中将FS
更改为;
awk -F';' 'NR>1{arr[$11]++}END{for (a in arr) print a, arr[a]}' file
COMMITTED 2
你使用了错误的字段分隔符。使用
awk -F\;
必须逃避;
以将其用作文字。除此之外,您的方法似乎没问题。
除了awk,你也可以使用
tail -n +2 $f | cut -f11 -d\; | sort | uniq -c
要么
datamash --header-in -t \; -g 11 count 11 < $f
做同样的事情。