seq與Shell序列生成

2022-03-27 12:50:15 字數 2611 閱讀 2777

有時候可能有這樣的需要:用shell生成類似0001這樣的序列作為批次號,這裡整理了一下個人的方法

seq命令可以生成從某個數字到遞增到另一數字的序列。用法如下:

# seq --help

usage:

seq[選項]  尾數

or:

seq[選項]  首數 尾數

or:

seq[選項]  首數 增量值 尾數

print numbers from first to last,

in steps of increment.

選項引數如下:

-f, --format=格式      use printf style floating-point format

-s, --separator=字串 用指定的字串分割各序列值,預設分隔符為\n

-w, --equal-width 使各序列值位數寬度相等,位數不夠的在前面用0補齊

示例1:指定序列格式

[root@bogon ~]# seq -f '%g'

26 ##沒有使用-f指定格式時,預設格式時%g,可以認為%g沒有指定任何格式23

456[root@bogon ~]# seq -f '

%3g'72

12 ##-f '%3g' 可以直接指定序列的寬度(3位數),這裡不足的部分用空格補齊 79

11[root@bogon ~]# seq -f '

%03g'7

212 ##-f '%03g' 可以指定序列寬度(3位數),不足的部分用0補齊

007009

011[root@bogon ~]# seq -f '

tmp_%g'7

212 ##%前面也可以根據需要新增字串,生成具有自己想要的字首的序列

tmp_7

tmp_9

tmp_11

示例2:指定序列分隔符

[root@bogon ~]# seq -s , 2

62,3,4,5,6

[root@bogon ~]# seq -s "

`echo -e

"\t"`"

2623

456

示例3:指定序列寬度,不足的位數用0補齊

[root@bogon ~]# seq -w

810 ##不設定步長

0809

10[root@bogon ~]# seq -w13

10 ##設定步長

0104

0710

注:-f 可以直接指定序列的寬度,-w是將序列中的最大值的寬度作為序列的寬度;

-f 和 -w 引數不能一起使用;

通過上面的例子可以發現,seq生成序列:簡單,能方便的生成序列,且序列的增量步長、序列之間的分隔符都可控,對於同一指令碼中生成多個序列號的需求十分有效。

但是在實際中也有不足:若某個指令碼要執行多次,若不做處理,批次號的初始值還是原來的初始值。這種情況下,個人的思路是通過已有檔案的批次號的第乙個非0字元後面的數字取出來,作為新的seq的起始值。

示例示例如下:

##獲取本次指令碼第幾次執行,以生成批次號

if [ ! -f $"

tmp_

"$"_000001.log

" ];then

v_start_no=1

else

v_start_no=`ls -l $ | grep

"tmp_

"$ | awk

'' | sort -n | tail -1 | sed

's/^0*//'`

v_start_no=$((v_start_no+1

))fi

##每次操作乙個檔案

for v_batch_no in `seq -w $ 100000 | head -1` ; do

touch

"tmp_

"$".log

"done

根據自己實際情況為準,這裡的部分內容是自己改過的。

示例如下:

######生成批次號:6位數字,從000001開始,每次加1########

num=`ls -l $ | grep test_$ | awk

'' | sort -n | tail -1 | sed

's/^0*//'`

if [ ! -f $"

test_

"$"_000001

".txt ];then

v_batch_no="

000001

"else

tmp_num=$((num+1

)) v_batch_no=`printf "

%06d\n"$`

fi

方法三:for遍歷指定的字串行

示例如下:

[root@bogon tmp]# for i in ;do

echo $i;done

001002

003(略)

這種方法也可以生成類似001這種序列號,但是比使用seq還是要差很多的。

seq與Shell序列生成

oracle scaqad02adm01 lstorm t.sh12 345 oracle scaqad02adm01 lstorm cat t.sh usr bin sh set o nounset amount workload 5 for i in seq amount workload do...

Shell中seq的用法

seq squeue 是乙個序列的縮寫,主要用來輸出序列化的東西 用法 seq 選項 尾數 seq 選項 首數 尾數 seq 選項 首數 增量 尾數 以指定增量從首數開始列印數字到尾數 f,format 格式 使用printf 樣式的浮點格式 後面跟的 0.3g s,separator 字串 使用指...

seq 生成隨機數

seq命令用於產生從某個數到另外乙個數之間的所有整數。seq 選項 尾數 seq 選項 首數 尾數 seq 選項 首數 增量 尾數 f,format 格式 使用printf 樣式的浮點格式 s,separator 字串 使用指定字串分隔數字 預設使用 n w,equal width 在列前新增0 使...