如何使用unix脚本在两个或三个字段上对csv文件进行聚合 我试过的

如何使用unix脚本在两个或三个字段上对csv文件进行聚合 我试过的,unix,Unix,和我想要的输出 A,RC,2 A,OTC,1 B,OTC,2 C,RC,1 D,PB,1 在awk中: $ awk 'BEGIN{FS=OFS=","}{a[$2 OFS $3]+=$4}END{for(i in a)print i,a[i]}' file D,PB,1 C,RC,1 A,OTC,1 A,RC,2 B,OTC,2 解释: BEGIN { FS=OFS="," # set delimiters } { a[$2 OFS $3]+=$4

和我想要的输出

A,RC,2
A,OTC,1
B,OTC,2
C,RC,1
D,PB,1
在awk中:

$ awk 'BEGIN{FS=OFS=","}{a[$2 OFS $3]+=$4}END{for(i in a)print i,a[i]}' file
D,PB,1
C,RC,1
A,OTC,1
A,RC,2
B,OTC,2
解释:

BEGIN { 
    FS=OFS=","          # set delimiters
}
{
    a[$2 OFS $3]+=$4    # hash to a, $2 and $3 as key
}
END {                   # in the end
    for(i in a)         # all entries
        print i,a[i]    # output
}

由于in运算符的性质,输出顺序是随机的。如果需要排序,请使用sort或GNU awk的asort。

我们接收的参数是动态的还是固定的?哪些参数?csv文件中的列数如何在脚本中写入并传递动态/运行时文件??就像将输出存储在另一个csv文件中的Script_name File_name一样???好吧,这是需求中的一个相当大的变化,值得作为一个单独的问题发布。请收集问题的所有要求,而不是将其放在评论中。编写类似代码的方法与您在OP中所要求的不同。
$ awk 'BEGIN{FS=OFS=","}{a[$2 OFS $3]+=$4}END{for(i in a)print i,a[i]}' file
D,PB,1
C,RC,1
A,OTC,1
A,RC,2
B,OTC,2
BEGIN { 
    FS=OFS=","          # set delimiters
}
{
    a[$2 OFS $3]+=$4    # hash to a, $2 and $3 as key
}
END {                   # in the end
    for(i in a)         # all entries
        print i,a[i]    # output
}