使用 Bash 对文本文件中的数字列表求和
本篇文章将介绍使用 Bash 脚本对文件中的数字列表求和的多种方法。 第一种方法涉及使用粘贴命令,我们将讨论两种情况:使用现有文件和使用标准输入读取文件。
最后,我们将讨论用于获取总和的 cut
和 awk
命令。
使用 Bash 对文本文件中的数字列表求和
下面描述的方法将假设我们有一个标题为 numbers.txt 的输入文件。
numbers.txt 文件:
1
2
3
4
5
6
7
8
9
10
使用现有文件
如果我们将所有数字存储在一个简单的文本文件中,每个数字单独一行,那么我们可以在 Bash 中调用以下命令并获取总和。
命令:
paste -sd+ numbers.txt | bc
输出:
55
使用标准输入(标准输入)
以下命令可以从文件中读取并获取数字的总和。
命令:
cat numbers.txt | paste -sd+ | bc
输出:
55
在这种情况下,我们使用命令 cat numbers.txt 从文件中读取。 此命令可以替换为任何其他返回数字列表的命令。
应该注意的是,虽然 paste 有一个 POSIX 定义的规范,但并不是每个实现都是相同的。 需要在 Mac OS 中使用以下命令才能获得相同的输出。
命令:
<cmd> | paste -sd+ - | bc
使用 cut 命令
假设我们有一个包含多列的文本文件,我们想要获得特定列的总和。 我们可以使用 cut 命令来实现这一点。
假设我们有一个 numbers.txt 文件,定义如下:
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
我们可以使用下面的命令分别总结每一列。
命令:
cat numbers.txt | cut -d ' ' -f 2 | paste -sd+ | bc -l
-f
之后的参数表示要求和的列号。 还应注意,在这种情况下,列号的计数从 1 而不是 0 开始。
当我们为 -f
标志添加 passed 2 时,我们将获得第二列的总和。
输出:
10
使用 awk 命令
以其作者命名的 awk 命令比我们以前的方法更适合这项任务。 测量时,awk 的性能比我们以前的方法好得多。
命令:
awk '{s+=$1} END {print s}' numbers.txt
输出:
55
您可以将 numbers.txt 替换为包含您的号码的文件的名称。 这也使我们能够绕过通过 cat 读取文件,这对卓越的性能负有部分责任。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。