gpt4 book ai didi

csv - Unix,对 file.csv 中的行进行分组并计算列的总和值

转载 作者:行者123 更新时间:2023-12-02 03:41:54 25 4
gpt4 key购买 nike

我有这个文件.csv

"201707"|"51976551"|1|0|1|"20170702"
"201707"|"51955194"|1|0|0|"20170702"
"201707"|"51923555"|1|0|1|"20170702"
"201707"|"51976551"|1|0|1|"20170703"
"201707"|"51955194"|1|0|0|"20170703"
"201707"|"51923555"|1|0|1|"20170703"
"201707"|"51960597"|1|0|0|"20170703"

我希望的结果是按数字分组并对第 3、4 和 5 列求和

"201707"|"51976551"|2|0|2
"201707"|"51955194"|2|0|0
"201707"|"51923555"|2|0|2
"201707"|"51960597"|1|0|0

我尝试过:

cat file.csv | awk -F"|" '
{ a[$2] += $3 }
END {
for (i in a) {
printf "%s|%s\n", i, a[i];
}
}
'

结果是:

"51976551"|2
"51955194"|2
"51923555"|2
"51960597"|1

仅显示第三列的总和,但我还需要 2 列。这种情况我该怎么办?

最佳答案

尝试:

$ awk -F"|" '{ a[$1 OFS $2]+=$3; b[$1 OFS $2]+=$4; c[$1 OFS $2]+=$5 }
END {
for (i in a) {
print i, a[i], b[i], c[i];
}
}
' OFS=\| file.csv
"201707"|"51976551"|2|0|2
"201707"|"51960597"|1|0|0
"201707"|"51923555"|2|0|2
"201707"|"51955194"|2|0|0

它是如何工作的

  • -F"|"

    这将输入上的字段分隔符设置为|

  • a[$1 OFS $2]+=$3; b[$1 OFS $2]+=$4; c[$1 OFS $2]+=$5

    这会跟踪第三、第四和第五列的总计。

  • END {
    对于(a中的i){
    打印 i,a[i],b[i],c[i];
    }
    }

    这会打印出结果。

  • OFS=\|

    这告诉 awk 使用 | 作为输出中的字段分隔符。

关于csv - Unix,对 file.csv 中的行进行分组并计算列的总和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48332440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com