如何在 Linux 上使用 seq 命令

已發表: 2022-01-29
Linux PC 上的終端​​提示符。
Fatmawati Achmad Zaenuri/Shutterstock

Linux seq命令在眨眼之間生成數字列表。 但是如何才能將這個功能付諸實踐呢? 我們將向您展示 seq 如何為您派上用場。

seq 命令

乍一看,Linux seq命令似乎有點奇怪。 它允許您快速生成數字序列,僅此而已! 不過,這裡的關鍵詞是“快速”。 稍後,您將看到這個小命令的運行速度有多快。

然而,不管它們是如何生成的,數字列表有多大用處? seq命令於 1985 年被添加到 Unix 的第 8 版中。從那以後它就一直存在,所以它必須做一些有價值的事情。

Unix 的哲學是它充滿了做一件事並且做得很好的小實用程序。 這種哲學的核心原則之一是編寫接受其他程序輸入的程序。 當然,這也意味著這些程序必須生成可以被其他程序用作輸入的輸出。

seq命令與通過管道或命令行擴展使用其輸出的其他命令一起使用時,它就會發揮自己的作用。

基本列表生成

如果您使用單個數字作為命令行參數啟動seq ,它會從 1 計數到該數字。 然後它在終端窗口中打印數字,每行一個數字,如下所示:

 序列 6 

廣告

如果在命令行中輸入兩個數字,第一個是開始號,第二個是結束號,如下圖:

 序列 4 10 

您可以通過包含第三個數字來設置步長。 它位於開始和結束數字之間。 我們輸入以下內容來要求seq創建一個以 6 開頭、以 48 結尾並使用 6 步長的數字列表:

 序列 6 6 48 

倒數

我們還可以要求seq創建一個從最高到最低的數字列表。 然而,要做到這一點,我們必須提供一個消極的步驟。

以下命令生成一個從 24 到 12 以 6 為步長計數的列表,因為我們將步長鍵入為負數:

 序列 24 -6 12 

用小數計數

開始、結束和步數也可以是小數。 如果任何數字是小數,則其他數字也被視為小數。 以下命令生成步長為 0.2 的數字列表:

 序列 1 0.2 2 

seq的速度

seq非常快——唯一的瓶頸是你在終端窗口中輸入命令所花費的時間。 為了測試它的速度,讓我們請求一個包含 250,000 個數字的列表。

廣告

我們鍵入以下內容,使用time命令查看該過程需要多長時間才能完成:

 時間序列 250000 

結果顯示在列表下方。 即使在我們中等功率的測試 PC 上, seq也快得驚人。

整個列表在大約 1/3 秒內創建並寫入屏幕。 如果我們將列表重定向到一個文件中,我們甚至可以避免在終端窗口中輸入的開銷。

為此,我們鍵入以下內容:

 時間序列 250000 > numbers.txt 

完成列表和創建文件所需的時間現在約為 1/7 秒。

使用分隔符

換行符是列表中每個數字之間顯示的默認字符。 這就是為什麼它們以垂直列表的形式出現,每個數字單獨一行。 如果需要,您可以提供另一個分隔符。

廣告

例如,假設您需要創建一個逗號分隔的列表、一個由冒號分隔的列表或任何其他標點符號或符號。 分隔符實際上是一個字符串,因此您可以使用多個字符。

我們將使用-s (分隔符)選項。 以下命令將生成一個逗號分隔的列表:

 序列號,6 6 36

此命令將使用冒號 ( : ) 作為分隔符:

 序列-s:6 6 36

此命令告訴seq使用兩個連字符 ( - ) 作為分隔符:

 序列-s-- 6 6 36 

使用格式字符串

seq命令還支持 C 語言風格的格式字符串。 這些允許您格式化輸出,而不僅僅是指定分隔符。 要使用格式字符串,請使用-f (格式)選項。

以下命令告訴seq使用零將輸出填充為兩個字符:

 seq -f "%02g" 6 

廣告

我們可以用我們喜歡的任何文本格式化字符串,並將數字放在字符串中的任何位置,如下所示:

 seq -f "C 格式字符串中的數字 %02g" 6 

設置零填充的快速方法

設置零填充的最快方法是使用-w (等寬)選項。 這告訴seq使用零來填充數字,因此它們的寬度都與最大數字相同。

以下命令以 100 為步長從 0 計數到 1,000,並且所有數字都將用零填充:

 序列-w 0 100 1000 

最長的數字需要四個字符,因此所有較窄的數字都用零填充到該寬度(即使 0 也填充到四個零)。

將 seq 導入 bc

通過將分隔符設置為數學符號並將列表傳遞給bc命令,我們可以評估該列表中的數字。

以下命令生成由星號 ( * ) 分隔的數字列表,從 1 開始,以 6 結尾:

 序列-s* 6
廣告

如果我們將該列表輸入bc ,它會使用星號 ( * ) 作為乘法符號來評估該列表:

 序列-s* 6 | 公元前

我們也可以用其他符號來做到這一點。 下面的命令使用加號 ( + ) 創建一個列表,其中添加了所有數字:

 序列-s+ 5

我們鍵入以下內容將其通過管道傳輸到bc並評估列表:

 序列-s+ 5 | 公元前

使用 seq 創建文件

touch命令更新文件上的時間和日期戳。 如果文件不存在,touch 會創建它。 我們可以使用帶有touchseq的命令行擴展來創建主題命名但編號不同的文件的集合。

我們將創建一組 10 個具有相同基本名稱和不同編號的文件(file-1.txt、file-2.txt 等)。 我們輸入以下內容:

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

然後,我們鍵入以下內容來檢查文件:

 ls 文件* 

在 Bash 循環中使用 seq

我們可以在 Bash 腳本中使用seq來控制帶小數的循環。

廣告

在編輯器中輸入以下文本,然後將其保存為“loops.sh”:

 #!/bin/bash

  對於 $(seq 5 0.2 6.6) 中的 val; 做

  echo "現在的值是:$val"

完畢

接下來,我們鍵入以下內容以使我們的新腳本可執行:

 chmod +x loop.sh 

當我們運行腳​​本時,循環計數器會打印在終端窗口中。 然後我們可以輸入以下內容來查看十進制循環計數器隨著循環的每次迭代而增加:

 ./loop.sh 

請記住, seq也可以倒數; 您可以以相同的方式在循環中使用它。

好又簡單

關於seq的一件事是沒有太多的學習曲線。 它有一個令人耳目一新的簡短man頁,但您仍然可以以有趣的方式使用它。

因為我們經常需要快速創建具有實際大小的測試文件,所以我們使用帶有格式字符串的seq 。 然後我們重定向輸出以創建一個包含盡可能多行的虛擬數據的文件。

相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦