【发布时间】:2016-06-08 22:25:21
【问题描述】:
我收到这样的 CSV:
column$1,column$2,column$
john,P,10
john,P,10
john,A,20
john,T,30
john,T,10
marc,P,10
marc,C,10
marc,C,20
marc,T,30
marc,A,10
我需要对这些值求和并显示名称和结果,但第 2 列需要显示从值 P、A、C 中分离出来的值 T 的总和。 输出应该是这样的:
column$1,column$2,column$3,column$4
john,PCA,40
john,T,40,CORRECT
marc,PCA,50
marc,T,30,INCORRECT
我所能做的就是从原始 csv 中提取我需要的列:
awk -F "|" '{print $8 "|" $9 "|" $4}' input.csv >> output.csv
也按正确的列排序:
sort -t "|" -k1 input.csv >> output.csv
并在 csv 末尾添加一个新列:
awk -F, '{NF=2}1' OFS="|" input.csv >> output.csv
我设法按列 $1 和 $2 求和并显示总和,但我不知道如何对列 $2 中的不同值进行分组:
awk -F "," '{col[$1,$2]++} END {for(i in col) print i, col[i]}' file > output
【问题讨论】:
-
试试
awk '{if($2 == "T") $4 = "MATCHED" ; print $0}' file > newFile祝你好运。 -
发布一些简洁、可测试的样本输入和预期输出,我们可以为您提供帮助。
-
刚刚编辑了问题
-
是什么决定了文本
,CORRECT还是,INCORRECT应该附加到行中?它在您的示例输出中,但在您的问题中没有解释。 -
对不起。如果 P,C,A 记录的 SUM 与 T 记录的 SUM 匹配,则正确。
标签: linux bash sorting csv awk