shell

shell命令_seq

2018-09-16  本文已影响8人  Chaweys

用于产生从某个数到另外一个数之间的所有整数

例一:

# 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 -s -w]

-f, --format=FORMAT       指定打印的格式
-s, --separator=STRING    指定分隔符默认是回车
-w, --equal-width         输出是同宽前面不足的用"0" 补全,即与位数最多的数对齐

-f选项

-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]http://www.xxxsite.com/photo/$i.jpg[/img] ; then
   wget -P $HOME/tmp -c $_
 fi
done

-f, --format=FORMAT
指定打印的格式
例如:
[root@hao32]# seq -f %05g 2 7
00002
00003
00004
00005
00006
00007

-s选项

-s, --separator=STRING
指定分隔符 默认是回车,预设是\n换行
例如:
[root@hao32]# seq -s" " 2 7
2 3 4 5 6 7

seq -s" " -f"str%03g" 9 11
str009 str010 str011

要指定\t 做为分隔符号
seq -s "`echo -e "\t"`" 9 11
9      10       11

指定\n\n作为分隔符号
seq -s "`echo -e "\n\n"`" 9 11
91011
19293949596979899910911
得到的是个错误结果
不过一般也没有这个必要  它默认的就是回车作为分隔符

-w选项

-w, --equal-width
输出是同宽前面不足的用"0" 补全,即与位数最多的数对齐
例如:
[root@hao32]# seq -w 2 11
02
03
04
05
06
07
08
09
10
11

-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
输出是同宽的
上一篇 下一篇

猜你喜欢

热点阅读