如何使用bash脚本根据另一列的条件对列进行求和并处理异常?

时间:2016-09-12 01:45:02

标签: bash shell

说我的文件是:

1  pretty_    18
2  _candy123  2
3  kitty      9
4  hellokitty 11

如果$ 2列包含“ty”,我想总结$ 3列;由于$ 2是唯一包含字母的列,我想使用:

grep "ty" output | awk '{sum+=$3} END{print sum}'

我的问题是:

  1. 如果文件中有另一列可能包含“ty”(计算应仅基于$ 2),我该怎么办?
  2. 如果我想在所有第二列中没有“ty”时输出0,我应该添加什么?
  3. 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以为每个块添加条件,例如awk 'NR > 2{print $2}' file

~允许将变量与正则表达式匹配

$ awk '$2 ~ /ty/{sum+=$3} END{print sum}' output
38

如果甚至一次找不到模式,可以采用不同的方式处理:

$ awk '$2 ~ /abc/{sum+=$3} END{print sum}' output

$ awk '$2 ~ /abc/{sum+=$3} END{print sum+0}' output
0
$ awk '$2 ~ /abc/{sum+=$3} END{print +sum}' output
0

答案 1 :(得分:0)

试试这个

x=($(cut -d ' ' -f3 FILE|grep -n ty|cut -d ':' -f1|paste -d $'\t' - - -))

for i in ${x[@]}
do
    nl -n ln FILE|grep ^$i|tr $'\t' ' '|tr -s ' '|cut -d ' ' -f2,4|tr ' ' '+'|bc
done