seq:输出序列化数

QuibblerQuibbler 2020-03-28 约 4 分钟 2043 次阅读

Shell 里要生成一串连续数字——批量建文件、写循环、造测试数据——seq 就是为这而生的:给定首数、增量、尾数,它把落在序列上的整数逐行打印出来。这篇按基本形式、常用选项、实战用法三类整理,末尾附速查表,完整参数可查 GNU coreutils 的 seq 文档。

1、三种基本形式

seq 接受 1 个、2 个或 3 个数字参数,三种形式如下:

seq 5        # 输出 1~5,首数默认 1,增量默认 1
seq 5 10     # 输出 5~10,含首尾边界
seq 1 2 10   # 输出 1 3 5 7 9,增量为 2

三种形式的输出依次如下:

1 2 3 4 5
5 6 7 8 9 10
1 3 5 7 9

第三种形式有个易错点值得单独记:只输出落在"首数 + k × 增量"上且不超过尾数的值。seq 1 2 10 不含 10,因为 10 不在步进序列上,下一个候选 11 又超出边界——增量不整除区间时,尾数是"天花板"不是"必达项"。

2、三个常用选项

2.1、指定分隔符

-s 改变数字之间的分隔符,默认是换行:

seq -s '#' 1 2 10

输出为一行 1#3#5#7#9。想要单行序列喂给下游命令时最常用,比如拼逗号分隔的 ID 列表用 -s ','。

2.2、等宽补零

-w 让所有数字同宽,不足的左侧补零:

seq -s ' ' -w 1 2 10

输出为 01 03 05 07 09。注意宽度基准是尾数的位数——本例 10 虽然不会被打印,但两位数的宽度已经被用来补零了。批量生成 file01.txt 这类文件名时正好用上。

2.3、格式化输出

-f 使用 printf 风格的浮点格式,%g 占位实际数字:

seq -f 'str%5g' 1 5

输出为五行的 str 加右对齐数字,%5g 表示宽度 5、不足左侧补空格。相比 -w 只能补零,-f 可以嵌入任意前后缀并控制对齐,是三个选项里最灵活的。

3、实战用法与花括号对比

最高频的场景是驱动 for 循环,比如批量创建 20 个带编号的文件:

for i in $(seq -f 'file%02g' 1 20); do touch "$i.txt"; done

%02g 补零到两位,生成 file01.txt 到 file20.txt。倒序也支持,增量为负即可:seq 10 -1 1 输出 10 到 1。

Bash 内建的花括号展开 {1..10} 也能生成序列,且不 fork 子进程、更快,纯字面量场景优先用它。seq 的不可替代之处在于边界可以是变量——seq $start $end 正常工作,而 { $start..$end } 不会展开变量,循环边界来自参数或计算结果时只能用 seq。

4、速查表

常用形式与选项浓缩一张表:

场景 命令
1 到 n seq 5
指定区间 seq 5 10
指定增量 seq 1 2 10
倒序 seq 10 -1 1
自定义分隔符 seq -s ',' 1 10
等宽补零 seq -w 1 20
格式化输出 seq -f 'file%02g' 1 20
变量边界循环 seq $start $end

5、总结

seq 的用法一句话概括:三种参数形式(尾数、首尾、首增量尾)决定序列本身,三个选项(-s 分隔、-w 补零、-f 格式化)决定输出长相。两个关键认知——增量不整除时尾数是天花板不是必达项;字面量序列用 {1..10} 更快,变量边界只能靠 seq。对于写 Shell 脚本的人,建议把速查表存进备忘录,与 Git 系列速查放在一起,更多 Linux 命令可查 Linux 命令大全,手册原文见 man seq。

相关推荐

获取系统SDK版本、判断手机ROM
精选Code

获取系统SDK版本、判断手机ROM

Build获取系统SDK版本Android中部分API的使用,需要在特定的SDK版本之后才能使用,因此在兼容老版本SDK的时候,经常需要判断API的版本。各种Android版本的对应关系参考《Android各版本对应的SDK版本》判断手机ROM有时候需要判断手机系统的ROM,检测ROM是MIUI、EMUI还是Flyme,可以使用getprop命令,去系统build.prop文件(关于build.p

4.3k
AndroidStudio中各种中文乱码问题
精选Code

AndroidStudio中各种中文乱码问题

AndroidStudio中各种中文乱码问题1、编译Java错误信息乱码在出现这个Annotation processors must be explicitly declared now...问题的时候,正好也发现AndroidStudio Build Output错误信息都乱码。经常遇到各种问题,习惯了,现在遇到的问题,都是以后的答案。 1.1、修改项目build.gradle(无效)在整个p

2.8k
Function Calling 详解:让大模型调用你的函数
精选Code

Function Calling 详解:让大模型调用你的函数

问大模型“北京今天多少度”,它只能用训练数据里的旧知识猜,或者老实承认不知道。但如果告诉它“我这里有个查天气的接口”,它会说:“帮我调用 get_weather,城市参数填北京。”你的程序执行调用,把结果递回去,它再组织成一句自然的回答。Function Calling(函数调用)让模型从“只会聊天”进化为“会办事”——它是大模型连接外部世界的第一块基石,也是一切 Agent 系统的地基。本文按“…

108