linux 嗨,我需要在每个id的每行中添加金额$5

zpf6vheq  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(114)

是否可以将每个id的一行之和相加;代码;类型;2023-06-30; 2023年7月1日;2023年7月2日; 2023年7月3日;2023年7月4日; 2023年7月5日;2023年7月6日; 2023年7月7日;2023年7月8日; 2023-07-09;2023-07-10; 2023-07-11;2023-07-12; 2023-07-13;2023-07-14; 2023-07-15;2023-07-16; 2023-07-17;2023-07-18; 2023-07-19;2023-07-20; 2023-07-21;2023-07-22; 2023-07-23;2023-07-24; 2023-07-25;2023-07-26; 018-118;超速;公路27 OP RZ 27 A-032罗马“罗马”,km 16 + 072; 32;24225;31; 25164;43; 40;24877;34; 20993;47;26631 48;25119;3;1847; 317;1;9465;2; 7556; 5;7681;2;8401;(32+24225+31+25164+43+27562+40+24877+34+20993+47+26631+48+25119+3+1847+317+1+9465+ 2 +7035+ 2 +7556+5+7681+2+8401)018-118;车道;公路27 OP RZ 27 A-032罗马,km 16 + 072; 3;8416;9;9114;四、九四八二、四三一二、5;8459;1;8552; 2;8563;5;8772; 6;9006;4;11910; 4;9276;5;8685; 2;8261;2;(3+8416+9+9114+4+9482+4+9312+5+8459+1+8552+2+8563+5+8772+6+9006+4+11910+4+9276+5+8685+2+8261+2)
我的代码

awk '
    BEGIN {
        FS = SUBSEP = ";"
        ORS = ""
        PROCINFO["sorted_in"] = "@ind_str_asc" 
    }
    {
        date[$1]
        tuple[$3,$4,$6]
        val[$3,$4,$6,$1] = $5
    }
    END {
        print "id;code;type"
        for (i in date) print FS i
        print "\n"

        for (i in tuple) {
            print i
            for (j in date) {
                k = i SUBSEP j
                print FS ( k in val ? val[k] : "" )
            }
            print "\n"
        }
    }
' test/all.csv >test.csv
j5fpnvbx

j5fpnvbx1#

假设你想从第四列开始求和,而不是$5,这是一个简单的三行变化:

gawk '
    BEGIN {
        FS = SUBSEP = ";"
        ORS = ""
        PROCINFO["sorted_in"] = "@ind_str_asc" 
    }
    {
        date[$1]
        tuple[$3,$4,$6]
        val[$3,$4,$6,$1] = $5
        total[$3,$4,$6] += $5  # for clarity, could just
                               #   store in tuple array
    }
    END {
        print "id;code;type"
        for (i in date) print FS i
        print FS "total\n"

        for (i in tuple) {
            print i
            for (j in date) {
                k = i SUBSEP j
                print FS ( k in val ? val[k] : "" )
            }
            print FS total[i] "\n"
        }
    }
' test/all.csv >test.csv

相关问题