Chinaunix首页 | 论坛 | 博客
  • 博客访问: 50224
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-25 14:40
文章分类

全部博文(12)

文章存档

2015年(4)

2014年(8)

我的朋友

分类: 系统运维

2015-01-20 21:52:26

用于产生从某个数到另外一个数之间的所有整数
例一:
# seq 1 10
结果是1 2 3 4 5 6 7 8 9 10
例二:
#!/bin/bash
for i in `seq 1 10`;
do
echo $i;
done
或者用
for i in $(seq 1 10)
也可以
seq
-f, --format=FORMAT      use printf style floating-point FORMAT (default: %g)
-s, --separator=STRING   use STRING to separate numbers (default: \n)
-w, --equal-width        equalize width by padding with leading zeroes
-f 选项   指定格式
#seq -f"%3g" 9 11
9
10
11
% 后面指定数字的位数 默认是"%g", 
"%3g"那么数字位数不足部分是空格
#sed -f"%03g" 9 11  这样的话数字位数不足部分是0
% 前面制定字符串
seq -f "str%03g" 9 11
str009
str010
str011
-w 指定输出数字同宽   不能和-f一起用
seq -w -f"str%03g" 9 11
seq: format string may not be specified when printing equal width strings
seq -w 98 101
098
099
100
101
输出是同宽的
-s 指定分隔符  默认是回车
seq -s" " -f"str%03g" 9 11
str009 str010 str011
要指定\t 做为分隔符号
seq -s"`echo -e "\t"`" 9 11
指定\n\n作为分隔符号
seq -s"`echo -e "\n\n"`" 9 11
19293949596979899910911
得到的是个错误结果
不过一般也没有这个必要  它默认的就是回车作为分隔符
 
几个例子
 
awk 'BEGIN { while (num < 10 ) printf "dir%03d\n", ++num ; exit}' | xargs mkdir
mkdir $(seq -f 'dir%03g' 1 10)
 
for i in `seq -f '%02g' 1 20`
do
if ! wget -P $HOME/tmp -c [img][/img] ; then
wget -P $HOME/tmp -c $_
fi
done
 
 
seq 是Linux 中一个预设的外部命令,一般用作一堆数字的简化写法,如
seq 1 10
便会出现
1
2
3
4
5
6
7
8
9
10
它还有三个选项
-f, --format=FORMAT      use printf style floating-point FORMAT (default: %g)
-s, --separator=STRING   use STRING to separate numbers (default: \n)
-w, --equal-width        equalize width by padding with leading zeroes
-f 最常用, 例如一次制做10 个名dir001 , dir002 .. dir010 的目录,它便很有用途,我们可以
这样下一个命令便可了
seq -f 'dir%03g' 1 10 | xargs mkdir

mkdir $(seq -f 'dir%03g' 1 10)
它用的是printf 的格式, %03g' 代表以三位浮点数,以此方法,如用bash3 的printf
也可作為等价命令
printf 'dir%03d\n' {1..10} | xargs mkdir  或mkdir `printf 'dir%03d ' {1..10}`
awk 当然也可以
awk 'BEGIN { while (num < 10 ) printf "dir%03d\n", ++num ; exit}' | xargs mkdir
这样会比写一个脚本快, 不必写成
for dir in 001 002 003 004 005 006 007 008 009 010
do
mkdir dir${dir}
done
我也常用seq 下载用数字的jpeg , 只要格式有数字顺序便可,尤以一些xxx site
for i in `seq -f '%02g' 1 20`
do
if ! wget -P $HOME/tmp -c [img][/img] ; then
wget -P $HOME/tmp -c $_
fi
done
 
-s 选项主要改变输出的分格符, 预设是\n , 就是newline
如用-s 便可改变, 如
seq -s ' ' 1 10
1 2 3 4 5 6 7 8 9 10  , 以空格作為分格, 但在Gnu 的seq , 好像
不支援\n ,\t ...等字符? 如用\n\n, 以两个空格, 便得写成
bash# seq -s '

> ' 1 5
1
 
2
 
3
 
4
 
5
\t 便得改变IFS, 如用\t\t
OIFS=$IFS
IFS="\t\t"
seq -s `echo -e $IFS` 1 5
IFS=$OIFS
其它的字符也是这样吧?
 
 
seq命令的作用就是打印出一串有序的数字,它主要有以下3个参数构成:
 
       -f, --format=FORMAT
use printf style floating-point FORMAT (default: %g)
-f 指定打印的格式:
例如:
bash# seq -f %05g 2 7
00002
00003
00004
00005
00006
00007
 
       -s, --separator=STRING
use STRING to separate numbers (default: \n)
-s 指定分隔符 默认是回车:
例如:
bash# seq -s" " 2 7
2 3 4 5 6 7
 
       -w, --equal-width
equalize width by padding with leading zeroes
-w 输出是同宽 前面不足的用"0" 补全,即与位数最多的数对齐
例如:
bash# seq -w 2 11
02
03
04
05
06
07
08
09
10
11

附带一个自动添加30个附属class1组的用户脚本参照学习:

点击(此处)折叠或打开

  1. #!/bin/bash
  2. groupadd class1
  3.  
  4. for i in {1..30}; do
  5.     useradd stud$i
  6. done
  7.  
  8. for i in `seq -f '%02g' 30`; do
  9.     useradd -g class1 std$i
  10. done
原文链接:





阅读(1733) | 评论(0) | 转发(0) |
0

上一篇:Linux的xargs常用语法记录

下一篇:没有了

给主人留下些什么吧!~~