嗨,我需要在每个 ID 的每一行中添加 5 美元的金额

hi i need to add the amount $5 in each line of each id

提问人:Кирилл Ермолаев 提问时间:9/27/2023 更新时间:9/28/2023 访问量:50

问:

是否可以为每个 id 添加一行的总和 id;代码;类型;2023-06-30;2023-07-01;2023-07-02;2023-07-03;2023-07-04;2023-07-05;2023-07-06;2023-07-07;2023-07-08;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 27A-032 罗马“罗马”,km 16 + 072;12年24225;11年25164;43;27562;40;24877;14岁20993;47;26631;48;25119;3;1847;317;1;9465;2;7035;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 27A-032 罗马,公里 16 + 072;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;(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
Linux Bash AWK

评论

0赞 user1934428 9/27/2023
我在您的代码中没有看到任何添加内容的尝试?
1赞 jhnc 9/28/2023
@user1934428那是因为它似乎是我从我对另一个问题的回答中剪切和粘贴的(最近已被编辑以复制此处的问题)
0赞 Ed Morton 9/28/2023
请参阅 stackoverflow.com/help/formatting,然后编辑问题,将输入、输出和代码格式化为代码块。

答:

1赞 jhnc 9/28/2023 #1

假设您想从第四列开始求和,而不是 ,这是一个简单的三行更改:$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