如何在Linux上使用seq命令

时间:2020-01-09 10:39:56  来源:igfitidea点击:

Linux的seq命令在眨眼间生成数字列表。但是,如何才能将此功能投入实际使用呢?我们将向我们展示seq如何。

seq命令

乍一看,Linux的seq命令似乎有些奇怪。它可以让我们快速生成数字序列,仅此而已!不过,这里的关键字很快。稍后,我们将看到此小命令可以运行的速度。

不管它们是如何生成的,数字列表有多有用? seq命令被添加到1985第八版Unix 中。

Unix的哲学是,它充满了可以完成一件事并做得很好的小实用程序。这种哲学的中心宗旨之一就是编写接受其他程序输入的程序。当然,这也意味着这些程序必须生成可被其他程序用作输入的输出。

当seq命令与其他通过管道或者命令行扩展来利用其输出的命令一起使用时,它会变成自己的命令。

基本列表生成

如果我们使用单个数字作为命令行参数启动seq,则从一个数开始计数。然后在终端窗口中打印数字,每行一个数字,如下所示:

seq 6

如果在命令行上键入两个数字,则第一个将是起始号,第二个将是结束号,如下所示:

seq 4 10

我们可以通过包含第三个数字来设置步长。它位于开始和结束数字之间。我们输入以下内容来要求seq创建一个以6开头,以48结尾并使用6步长的数字列表:

seq 6 6 48

倒数

我们也可以要求seq创建一个从最高到最低的数字列表。为此,我们必须提供一个否定的步骤。

以下命令生成一个列表,该列表以6的步长从24到12计数,因为我们将步长键入为负数:

seq 24 -6 12

小数计数

起始,结束和步骤号也可以是小数。如果任何数字是小数,则其他数字也将视为小数。以下命令以0.2为步长生成数字列表:

seq 1 0.2 2

序列速度

seq的速度非常快,唯一的瓶颈是在终端窗口中键入命令所花费的时间。为了测试其速度,我们要求提供250,000个数字的列表。

我们使用time命令输入以下内容,以查看该过程需要多长时间:

time seq 250000

结果显示在列表下方。即使在我们中等功率的测试PC上," seq"也非常快。

整个列表被创建并在大约1/3秒内写入屏幕。如果我们将列表重定向到文件中,甚至可以避免在终端窗口中键入内容的麻烦。

为此,我们键入以下内容:

time seq 250000 > numbers.txt

现在,完成列表和创建文件所需的时间约为1/7秒。

使用分隔符

换行符是列表中每个数字之间显示的默认字符。这就是为什么它们显示为垂直列表,每个数字都单独显示的原因。如果需要,可以提供另一个分隔符。

例如,假设我们需要创建一个以逗号分隔的列表,一个用冒号分隔的列表或者任何其他标点符号或者符号。分隔符实际上是一个字符串,因此可以使用多个字符。

我们将使用-s(分隔符)选项。以下命令将产生一个逗号分隔的列表:

seq s, 6 6 36

此命令将使用冒号()作为分隔符:

seq -s: 6 6 36

这个命令告诉seq使用两个连字符(-)作为分隔符:

seq -s-- 6 6 36

使用格式字符串

seq命令还支持C语言风格的格式字符串。这些使我们可以用更多控制权来格式化输出,而不仅仅是指定分隔符。要使用格式字符串,请使用-f选项。

以下命令告诉seq使用零将输出填充为两个字符:

seq -f "%02g" 6

我们可以使用任何喜欢的文本来格式化字符串,并将数字放置在字符串中的任何位置,如下所示:

seq -f "Number %02g in a C-like format string" 6

设置零填充的快速方法

设置零填充的最快方法是使用-w(等宽)选项。这告诉seq使用零来填充数字,因此它们的宽度与最大数字相同。

以下命令从0到1,000以100为步长计数,所有数字都将以零填充:

seq -w 0 100 1000

最长的数字需要四个字符,因此所有较窄的数字都用零填充到该宽度(即使0填充到四个零)。

将seq插入bc

通过将分隔符设置为数学符号并将列表传递到bc命令中,我们可以评估该列表中的数字。

以下命令生成一个由星号(*)分隔的数字列表,从一开始,以六结束:

seq -s* 6

如果我们将该列表输入到bc中,它将使用星号(*)作为乘法符号来评估该列表:

seq -s* 6 | bc

我们也可以使用其他符号来做到这一点。下面的命令使用加号(+)创建一个列表,其中添加了所有数字:

seq -s+ 5

我们输入以下内容将其通过管道传递到bc并评估列表:

seq -s+ 5 | bc

使用seq创建文件

touch命令更新文件上的时间和日期戳。如果文件不存在,请触摸创建它。我们可以使用带有touchseq的命令行扩展来创建一个以主题命名但编号不同的文件的集合。

我们将创建一组10个文件,它们具有相同的基本名称和不同的编号(file-1.txt,file-2.txt等)。我们输入以下内容:

touch $(seq -f "file-%g.txt" 1 10)

然后,我们键入以下内容检查文件:

ls file*

在Bash循环中使用seq

我们可以在Bash脚本中使用seq来控制带小数的循环。

在编辑器中键入以下文本,然后将其另存为loops.sh:

#!/bin/bash

  for val in $(seq 5 0.2 6.6); do

  echo "The value is now: $val"

done

接下来,我们键入以下内容以使我们的新脚本可执行:

chmod +x loop.sh

当我们运行脚本时,循环计数器将显示在终端窗口中。然后,我们可以键入以下内容,以查看十进制循环计数器随着循环的每次迭代而增加:

./loop.sh

请记住,seq也可以倒计数。我们可以以相同的方式在循环中使用它。