使用 awk 对特定列的值求和

dav*_*oid 2 bash awk

所以我有一个看起来像这样的文件:

1 4 6 
2 5
3
Run Code Online (Sandbox Code Playgroud)

我只想总结特定的列,比如说第一列和第三列。输出应如下所示:

7
2
3
Run Code Online (Sandbox Code Playgroud)

我将列数(参数)存储在一个变量中:( x=${@:2}因为我省略了第一个传递的参数 a $filename

如何在 bash 脚本中使用 awk 计算这个?我在想这样的事情

for i in ${@:2}
do
    awk  -v c=$i '{sum+=$c;print sum}' $fname

done
Run Code Online (Sandbox Code Playgroud)

但它不能正常工作。

Jam*_*own 5

这样的事情怎么样:

$ awk -v c="1 3" 'BEGIN{split(c,a)}{c=0;for(i in a) c+=$a[i]; print c}' file
7
2
3
Run Code Online (Sandbox Code Playgroud)

解释:

$ awk -v c="1 3" '  # the desired column list space-separated
BEGIN {
    split(c,a)      # if not space-separated, change it here
}
{
    c=0;            # reusing col var as count var. recycle or die!
    for(i in a)     # after split desired cols are in a arr, ie. a[1]=1, a[2]=3
        c+=$a[i];   # sum em up
    print c         # print it
}' file
Run Code Online (Sandbox Code Playgroud)

编辑:将逗号分隔更改为空格分隔。