使用 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}"
我有 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}"