有時候可能有這樣的需要:用Shell生成類似0001這樣的序列作為批次號,這里整理了一下個人的方法
方法一:通過seq命令
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' 2 6 ##沒有使用-f指定格式時,默認格式時%g,可以認為%g沒有指定任何格式 2 3 4 5 6 [root@bogon ~]# seq -f '%3g' 7 2 12 ##-f '%3g' 可以直接指定序列的寬度(3位數),這里不足的部分用空格補齊 7 9 11 [root@bogon ~]# seq -f '%03g' 7 2 12 ##-f '%03g' 可以指定序列寬度(3位數),不足的部分用0補齊 007 009 011 [root@bogon ~]# seq -f 'tmp_%g' 7 2 12 ##%前面也可以根據需要添加字符串,生成具有自己想要的前綴的序列 tmp_7 tmp_9 tmp_11
示例2:指定序列分隔符
[root@bogon ~]# seq -s , 2 6 2,3,4,5,6 [root@bogon ~]# seq -s "`echo -e "\t"`" 2 6 2 3 4 5 6
示例3:指定序列寬度,不足的位數用0補齊
[root@bogon ~]# seq -w 8 10 ##不設置步長 08 09 10 [root@bogon ~]# seq -w 1 3 10 ##設置步長 01 04 07 10
注:-f 可以直接指定序列的寬度,-w是將序列中的最大值的寬度作為序列的寬度;
-f 和 -w 參數不能一起使用;
通過上面的例子可以發現,seq生成序列:簡單,能方便的生成序列,且序列的增量步長、序列之間的分隔符都可控,對於同一腳本中生成多個序列號的需求十分有效。
但是在實際中也有不足:若某個腳本要運行多次,若不做處理,批次號的初始值還是原來的初始值。這種情況下,個人的思路是通過已有文件的批次號的第一個非0字符后面的數字取出來,作為新的seq的起始值。
示例示例如下:
##獲取本次腳本第幾次執行,以生成批次號 if [ ! -f ${SPOOL_DIR}"tmp_"${v_date}"_000001.log" ];then V_START_NO=1 else V_START_NO=`ls -l ${TEST_DIR} | grep "tmp_"${v_date} | awk '{print substr($9,24,6)}' | sort -n | tail -1 | sed 's/^0*//'` V_START_NO=$((V_START_NO+1)) fi ##每次操作一個文件 for v_batch_no in `seq -w ${V_START_NO} 100000 | head -1` ; do touch "tmp_"${v_batch_no}".log" done
根據自己實際情況為准,這里的部分內容是自己改過的。
方法二:直接根據已有文件名后綴獲取
示例如下:
######生成批次號:6位數字,從000001開始,每次加1######## num=`ls -l ${TMP} | grep TEST_${v_date} | awk '{print substr($9,24,6)}' | sort -n | tail -1 | sed 's/^0*//'` if [ ! -f ${TMP}"TEST_"${v_date}"_000001".txt ];then v_batch_no="000001" else tmp_num=$((num+1)) v_batch_no=`printf "%06d\n" ${tmp_num}` fi
方法三:for遍歷指定的字符序列
示例如下:
[root@bogon tmp]# for i in {001..100};do echo $i;done 001 002 003(略)
這種方法也可以生成類似001這種序列號,但是比使用seq還是要差很多的。
本文原始地址:VNX - 博客園 http://www.cnblogs.com/chinas/p/7101887.html,轉載請注明出處,謝謝!!!!
