Linux命令-seq(生成数字序列) Linux命令-seq生成数字序列快速参考基本语法常用选项实际应用场景高级用法在脚本中使用 seqseq 与 {..} 扩展对比性能对比故障排查总结快速参考seqsequence是用于生成数字序列的命令行工具。它按指定步长生成从起始值到结束值的一系列数字可以设置分隔符、宽度填充等。seq常用于 Shell 脚本中的循环、生成测试数据等场景。核心价值快速生成数字序列是 Shell 脚本中for循环的常用搭档。基本语法# 基本语法seq[选项]末值seq[选项]首值 末值seq[选项]首值 增量 末值# 生成 1 到 5 的序列seq5# 输出# 1# 2# 3# 4# 5# 生成 3 到 7 的序列seq37# 输出# 3# 4# 5# 6# 7# 生成 1 到 10步长为 2seq1210# 输出# 1# 3# 5# 7# 9常用选项# -w, --equal-width 等宽输出自动补零seq-w110# 输出# 01# 02# 03# ...# 10# -f, --format FORMAT 指定输出格式seq-f%03g15# 输出# 001# 002# 003# 004# 005seq-ffile_%02g.txt13# 输出# file_01.txt# file_02.txt# file_03.txt# -s, --separator STRING 指定分隔符默认换行seq-s,15# 输出1,2,3,4,5seq-s 15# 输出1 2 3 4 5seq-s\t13# 输出1\t2\t3# -h, --help 显示帮助seq--help# -V, --version 显示版本seq--version实际应用场景# 场景1在 for 循环中使用 # 示例1批量创建文件foriin$(seq110);dotouchfile_${i}.txtdone# 示例2批量重命名文件i1forfilein*.jpg;domv$fileimage_$(printf%03d$i).jpgi$((i1))done# 更优雅的写法foriin$(seq-w110);dotouchfile_${i}.txtdone# 场景2生成测试数据 # 生成 100 个测试文件foriin$(seq1100);doechoThis is test file$itest_${i}.txtdone# 生成指定范围的随机数据foriin$(seq110);doecho$RANDOMrandom_numbers.txtdone# 场景3结合 awk 使用 # 生成带编号的列表seq15|awk{print Line $0 : $0 * 10}# 输出# Line 1 : 10# Line 2 : 20# ...# 场景4生成 IP 地址列表 foriin$(seq110);doecho192.168.1.$idone# 使用 printf 格式化foriin$(seq-w110);doecho192.168.1.$idone高级用法# 使用小数步长 seq00.52# 输出# 0.0# 0.5# 1.0# 1.5# 2.0# 使用负数范围 seq5-11# 输出# 5# 4# 3# 2# 1# 使用科学计数法 seq-f%.2f0.10.10.5# 输出# 0.10# 0.20# 0.30# 0.40# 0.50# 结合 xargs 使用 seq15|xargs-I{}echoProcessing item {}# 生成大范围数字 seq11000000numbers.txt# 生成 100 万个数字在脚本中使用 seq#!/bin/bash# 使用 seq 生成表格数据echo 九九乘法表 foriin$(seq19);doforjin$(seq1$i);doprintf%d×%d%-2d $j$i$((j*i))doneechodone# 输出# 1×11# 1×22 2×24# 1×33 2×36 3×39# ...# 生成进度条模拟echo-nProcessing: foriin$(seq120);doecho-n#sleep0.1doneecho Done!# 生成测试负载 echoGenerating test load...foriin$(seq1100);do(echoRequest$i;sleep0.01)|nclocalhost80donewaitechoTest complete.seq 与 {…} 扩展对比# 使用 seq foriin$(seq110);doecho$idone# 使用 {..} 扩展更高效foriin{1..10};doecho$idone# 对比 # seq 支持变量、支持小数步长、支持格式控制# {..}更高效不产生子进程、但仅支持整数范围# 使用变量的示例START1END10foriin$(seq$START $END);do# 可以echo$idone# for i in {$START..$END}; do # 不可以{..} 不支持变量# echo $i# done# 正确做法使用 evalevalfor i in {$START..$END}; do echo \$i; done性能对比# 测试生成 1 到 100000 的性能# 方法1使用 seqtimeseq1100000/dev/null# 结果seq 1 100000 0.00s user 0.00s system# 方法2使用 {..} 扩展timeecho{1..100000}/dev/null# 结果echo {1..100000} 0.12s user 0.08s system# 结论{..} 扩展在生成大量整数时更快但 seq 更灵活故障排查# 问题1seq 命令找不到# 解决安装 coreutilssudoaptinstallcoreutils# Debian/Ubuntu# 问题2seq 输出格式不符合预期# 解决使用 -f 选项指定格式seq-f%04g110# 问题3步长设置错误# 解决确保步长与范围匹配seq1210# 正确1,3,5,7,9seq129# 正确1,3,5,7,9# 问题4在 macOS 上使用 seq# macOS 默认没有 seq 命令# 解决安装 coreutilsbrewinstallcoreutils# 然后使用 gseqGNU seqgseq110总结核心价值seq是生成数字序列的便捷工具特别适合在 Shell 脚本中生成循环范围。最佳实践使用-w选项生成等宽数字适合文件名使用-s选项指定分隔符适合生成列表如果不需要变量或小数步长优先使用{..}扩展更快在脚本中使用seq时注意命令替换的性能开销常用组合seq 1 10生成 1 到 10 的序列seq -w 1 100生成等宽数字01, 02, …, 100seq -s , 1 5生成逗号分隔的序列seq -f file_%02g.txt 1 3生成格式化序列for i in $(seq 1 10); do ...在循环中使用注意在 Bash 中如果只需要简单的整数范围使用{1..10}扩展比seq更高效。