用于从文件中选择所有数字的Shell脚本

时间:2014-04-07 14:39:48

标签: shell

我有一个文件,其中包含随机位置的单词和数字。我必须编写一个shell脚本来添加文件中的所有数字。

我想到了这样的事情:

filename=$1
words=` echo $filename `
sum=0
for word in words;
do
    #if $word is number, add to sum
done

如何验证shell中是否有数字?或者这整个方法都错了?

2 个答案:

答案 0 :(得分:0)

你可以用exacmle来表示:

grep -ow '[0-9]*' file | awk '{count+=$1} END{print count}'

解释

  • grep -ow '[0-9]*' file获取文件的所有数字块。 -w仅匹配字词,因此a23b不会匹配。
  • awk '{count+=$1} END{print count}'遍历grep结果,将每个数字添加到count变量。最后,打印结果。

实施例

$ cat a
aa b23 23 55
adf 23 23 62l

$ grep -ow '[0-9]*' a | awk '{count+=$1} END{print count}'
124

$ grep -ow '[0-9]*' a
23
55
23
23

答案 1 :(得分:0)

这是一个bash版本:

while read line; do
    set $line
    while (( $# > 0 )); do
        [[ "$1" =~ ^[0-9]+$ ]] && n="$1" && (( total += n ))
        shift
    done
done
echo $total