需要在 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
在上面:
第一行(记录)用NR>1
跳过。
n[k]
是key出现的次数k
(所以我们加1),s[k]
是运行中的求和值字段 6(所以我们添加 </code>)。</p></li>
<li><p>最后,在处理完所有记录后(<code>END
),您可以通过键(for (k in n) { ... }
)遍历关联数组并打印数组中的键和值n
和 s
与密钥关联。
你也可以试试这个 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
我有以下名为 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
在上面:
第一行(记录)用
NR>1
跳过。n[k]
是key出现的次数k
(所以我们加1),s[k]
是运行中的求和值字段 6(所以我们添加</code>)。</p></li> <li><p>最后,在处理完所有记录后(<code>END
),您可以通过键(for (k in n) { ... }
)遍历关联数组并打印数组中的键和值n
和s
与密钥关联。
你也可以试试这个 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