Bash:根据键汇总一列中的值

时间:2021-03-21 17:10:32

标签: bash awk

我有以下结构的日志文件:

DATE:AMZN:209:159.99
DATE:AMZN:300:159.99
DATE:GOOGL:75:552.03
DATE:GOOGL:300:1091.50
DATE:GOOGL:100:199.99
DATE:TSLA:19:9019.99

我想要做的是计算可以在日志文件中找到的每个公司(2. 列)的总数量(3. 列)。所以,这种情况下的结果应该是:

AMZN:509
GOOGL:475
TSLA:19

我尝试使用 awksort,但我对这些实用程序没有太多经验。如果您有任何建议,请在下方留言。

1 个答案:

答案 0 :(得分:0)

使用 awksort

awk 'BEGIN{FS=OFS=":"} {a[$2]+=$3} END{for(i in a){print i OFS a[i]}}' file | sort

有 GNU awk 和没有 sort

awk 'BEGIN{FS=OFS=":"}{a[$2]+=$3}END{PROCINFO["sorted_in"] = "@val_str_desc"; for(i in a)print i FS a[i]}' file

输出:

AMZN:509
GOOGL:475
TSLA:19

见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

相关问题