需要在solaris命令中重新排列和求和列

Bas*_*dev 2 awk solaris

我有以下数据名为atp.csv文件

Date_Time,M_ID,N_ID,Status,Desc,AMount,Type
2015-01-05 00:00:00 076,1941321748,BD9010423590206,200,Transaction Successful,2000,PRETOP
2015-01-05 00:00:00 077,1941323504,BD9010423590207,351,Transaction Successful,5000,PRETOP
2015-01-05 00:00:00 078,1941321743,BD9010423590205,200,Transaction Successful,1500,PRETOP
2015-01-05 00:00:00 391,1941323498,BD9010500000003,200,Transaction Successful,1000,PRETOP
Run Code Online (Sandbox Code Playgroud)

我想用下面的命令计算状态.

cat atp.csv|awk -F',' '{print $4}'|sort|uniq -c
Run Code Online (Sandbox Code Playgroud)

输出如下:

3 200
1 351
Run Code Online (Sandbox Code Playgroud)

但我想要在下面输出,并且还希望在状态方面总结金额列.

200,3,4500
351,1,5000
Run Code Online (Sandbox Code Playgroud)

那是状态首先然后计数值.请帮助..

小智 5

AWK具有关联数组.

% cat atp.csv | awk -F, 'NR>1 {n[$4]+=1;s[$4]+=$6;} END {for (k in n) { print k "," n[k] "," s[k]; }}' | sort
200,3,4500
351,1,5000
Run Code Online (Sandbox Code Playgroud)

在上面:

  1. 跳过第一行(记录)NR>1.

  2. n[k]是键的出现次数k(所以我们加1),并且s[k]是字段6中的运行和值(所以我们添加$6).

  3. 最后,在处理完所有记录(END)之后,您可以通过key(for (k in n) { ... })迭代关联的数组,并在数组中打印键和值ns与键相关联.