Linux基础命令-sed流编辑器
seq命令通常是用来打印一串有规律的数字,常与其他命令搭配使用,一起来看下它的用法。
在doc文档中查看seq命令的含义
NAME
seq - print a sequence of numbers
DESCRIPTION
Print numbers from FIRST to LAST, in steps of INCREMENT.
Mandatory arguments to long options are mandatory for short options too.
seq命令用来打印数字序列,用以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并可以对整数的格式,宽度,分隔符号进行控制。
seq的语法格式是seq 【参数】数值
SYNOPSIS
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
在文档中查看有这几个参数,并且这几个参数都是较为常用的,像help,version参数每个命令都会有的,这里就不列出具体含义了,实际上就是查看帮助信息以及版本等内容。
-f, --format=FORMAT
use printf style floating-point FORMAT
-s, --separator=STRING
use STRING to separate numbers (default: \n)
-w, --equal-width
equalize width by padding with leading zeroes
--help display this help and exit
--version
output version information and exit
命令选项 | 含义 |
---|---|
-f | 使用printf的浮点格式 |
-s | 使用字符串分隔数字 不指定默认是换行符 |
-w | 通过用前导0来均衡宽度 |
这里提到了printf的浮点格式,实际上浮点数有三种格式,分别是%e、%f、%g。
%e 是以科学计数法表示,小数点左边只有一位,小数点右边默认保留6位,再小数后面是符号e,就是整数的10的多少次幂。
举个例子就明白了,有一个数是123456,那么以科学计数法的方式计算,它的写法是:
123456== 1.23456 * 10^5 == 1.23456e5
%f要求小数点右边保留6位小数
例如有个值是3.14,%f默认保留6位小数,若小数不够,则补0
3.14 = 3.140000
%f也可以只保留两位小数,需要给它指定保留多少位小数
%0.2f
表示保留2位小数,当然也可以这样写 %.2f
,不加上小数点前面的0
%g 在数字很大或很小时会自动以指数形式表示,比较灵活,可读性比较强,一般用于整数。
seq -s ' ' -f '%02g' 1 10
01 02 03 04 05 06 07 08 09 10
在seq后的一个数值就是打印某个数以内的所有整数值
[root@VM-12-17-centos ~]# seq 10
1
2
3
4
5
6
7
8
9
10
有两个数值就是从first到last之间的整数
[root@VM-12-17-centos ~]# seq 15 20
15
16
17
18
19
20
现在的格式都是竖着显示,这样看着占用屏幕比较大,还记得为什么会竖着打印吗,-s默认是\n换行符进行分隔的,使用-s参数指定分隔符即可。
[root@VM-12-17-centos ~]# seq -s ' ' 1 100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
例如我们要创建10个目录文件,可以使用seq命令结合mkdir一起来使用
[root@VM-12-17-centos 2023-04-13]# seq -f 'dir%02g' 1 10 | xargs mkdir
[root@VM-12-17-centos 2023-04-13]# ls
dir01 dir02 dir03 dir04 dir05 dir06 dir07 dir08 dir09 dir10
这样10个目录文件都创建好了;
以上效果还可以用脚本来实现
[root@VM-12-17-centos 2023-04-13]# for i in `seq -f 'dir%02g' 11 20`;do mkdir /root/2023-04-13/$i;done
[root@VM-12-17-centos 2023-04-13]# ls
dir01 dir03 dir05 dir07 dir09 dir11 dir13 dir15 dir17 dir19
dir02 dir04 dir06 dir08 dir10 dir12 dir14 dir16 dir18 dir20
结果是一样的,因此在shell中,要实现某一种结果,可以有很多种方法。
-w参数在文档中查看还是很难明白它的意思,上手练习一下就会发现-w主要让每个数的宽度都达到一致。
如果是1-9的话,那使用-w参数没有什么区别
[root@VM-12-17-centos 2023-04-13]# seq -s ' ' 1 9
1 2 3 4 5 6 7 8 9
[root@VM-12-17-centos 2023-04-13]# seq -s ' ' -w 1 9
1 2 3 4 5 6 7 8 9
当打印的值有一个数有2位时,会将其他数也自动调整成两位,在值前面补上0,以确保每个值的宽度都是2位。
[root@VM-12-17-centos 2023-04-13]# seq -s ' ' 1 10
1 2 3 4 5 6 7 8 9 10
[root@VM-12-17-centos 2023-04-13]# seq -s ' ' -w 1 10
01 02 03 04 05 06 07 08 09 10