使用 grep 中的数字进行算术运算

Arithmetic operations using numbers from grep

我有 FILE,我可以使用 grep 从中提取两个数字。数字出现在最后一列。

 $ grep number FILE 
 number1:    123
 number2:    456

我想将数字分配给变量,例如$num1$num2,并使用变量进行一些算术运算。

如何使用 bash 命令执行此操作?

假设:

  • 我们希望匹配 字符串 number
  • 开头的行
  • 我们总能从输入文件
  • 中找到 ^number 的 2 个匹配项
  • 对在数组中存储值不感兴趣

示例数据:

$ cat file.dat
number1: 123
not a number: abc
number: 456

我们将使用 awk 找到所需的值并将所有值打印到单行输出:

$ awk '/^number/ { printf "%s ", }' file.dat
123 456

从这里我们可以使用read加载变量:

$ read -r num1 num2 < <(awk '/^number/ { printf "%s ", }' file.dat)

$ typeset -p num1 num2
declare -- num1="123"
declare -- num2="456"

$ echo ".${num1}.${num2}."
.123.456.

注意: 添加了句点作为视觉分隔符

首先,您需要从文件中提取数字。假设文件始终采用规定的格式,那么您可以使用 while 循环,结合 read 命令将数字读入命名变量,一次一行。

然后您可以使用 $(( )) 运算符执行整数运算以保持输入数字的总数 运行。

例如:

#!/bin/bash

declare -i total=0           # -i declares an integer.

while read discard number; do # read returns false at EOF. discard is ignored.
  total=$((total+number))     # Variables don't need '$' prefix in this case.
done < FILE                   # while loop passes STDIN to the 'read' command.

echo "Total is: ${total}"