shell脚本中的多个参数使用awk

时间:2016-12-15 13:04:25

标签: shell unix awk

我要创建一个能够对列进行求和的脚本。该文件看起来像这样:

1 2 3
1 2 
1

在没有参数./sum.sh的情况下执行脚本时,我得到了所有列的总和,所以答案是10.但是我必须让它只添加某些列。例如,./sum.sh 1 3应该将第一列和第三列相加并给出6。

我的代码:

sum=0

if [[ $# -eq 0 ]]; then
  awk '{for(i=1;i<=NF;i++) sum+=$i;}; END {print sum}' plik.txt
  else
    exit 0;
fi

while [ $# -gt 0 ]
do
    awk '{sum +="$1"} END {print sum}' plik.txt
    shift
done

我认为我非常接近解决方案,但必须缺少一些东西。

3 个答案:

答案 0 :(得分:2)

这一个班轮应该有效:

awk -v c="1 3" 'BEGIN{split(c,cols)}
               {for(x in cols)s+=$cols[x]}END{print "Sum:"s}' file

注意c="1 3"表示要进行求和的列,空格分隔。它可以由shell脚本变量-v c="$var"设置,awk将进行计算和输出。

使用您的示例文件,上面的单行输出:

Sum:6

答案 1 :(得分:1)

这是您的脚本和Kent的解决方案的组合

#!/bin/bash

file=plik.txt

if [ $# -eq 0 ];
    then
        awk     '{for(i=1;i<=NF;i++) sum+=$i} 
             END {print sum}' "$file"
    else
        awk -v cols="$*" 'BEGIN {split(cols,cs)}
                                {for(c in cs) sum+=$cs[c]}
                          END   {print sum}' "$file"    
fi

行动

$ ./sum.sh 1
3

$ ./sum.sh
10

$ ./sum.sh 1 3
6

$ ./sum.sh 1 2
7

$ ./sum.sh 1 2 3 4
10

$ ./sum.sh 1 2 3
10

答案 2 :(得分:0)

这是我提出的,不需要a = tf.zeros([3,4,10,5]) b = tf.zeros([3,4,1,5]) c = tf.concat(2, [a,b]) c.get_shape() Out: TensorShape([Dimension(3), Dimension(4), Dimension(11), Dimension(5)]) 条件:

bash