如何在 Linux 上使用 seq 命令
已發表: 2022-01-29
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 會創建它。 我們可以使用帶有touch
和seq
的命令行擴展來創建主題命名但編號不同的文件的集合。
我們將創建一組 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 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦