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

need to rearrange and sum column in solaris command

我有以下名为 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

我想使用以下命令明智地计算状态。

cat atp.csv|awk -F',' '{print }'|sort|uniq -c

输出如下:

3 200
1 351

但我想喜欢下面的输出,也想在状态方面对金额列求和。

200,3,4500
351,1,5000

也就是status在前,然后才算value.Please求助..

AWK 有关联数组。

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

在上面:

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

  2. n[k]是key出现的次数k(所以我们加1),s[k]是运行中的求和值字段 6(所以我们添加 </code>)。</p></li> <li><p>最后,在处理完所有记录后(<code>END),您可以通过键(for (k in n) { ... })遍历关联数组并打印数组中的键和值ns 与密钥关联。

你也可以试试这个 awk 版本

awk -F',' '{print ,",", a[]+=}' FileName  | sort -r  | uniq -cw 6 | sort -r

输出:

  3 200 , 4500
  1 351 , 5000

另一种方式:

awk -F',' '{print ,",", a[]+=}' FileName  | sort -r | uniq -cw 6 |sort -r |  sed 's/\([^ ]\+\).\([^ ]\+\).../,,/'

全部在 (g)awk

awk -F, 'NR>1{a[]++;b[]+=}
         END{n=asorti(a,c);for(i=1;i<=n;i++)print c[i]","a[c[i]]","b[c[i]]}' file