挖掘 FOR 的潛力(2)

2021-08-22 06:49:15 字數 1701 閱讀 1069

上一節講了利用for迴圈功能幫助我們輸出重複量較大的資料或是重複執行相同的命令。

這一節還是繼續挖掘for的迴圈能力,但這裡的迴圈將和前面不同,它能幫助我們處理工作當中常遇到的資料格式化問題,也可以說是對資料的抽取、轉換和載入,用一句術語來形容,那就是etl(extract、tranform、load)。

我們常會遇到這樣的具體問題,有大量具有固定格式的資料需要我們去提取其中的一部分,或者是要將它們中的一部分資料次序顛倒,再或者會重新組織它們中的部分或全部字段值。這時,有人就會說了,用ultraedit吧,它能幫你解決。沒錯,本人也很喜愛ue,它強大的文字編輯功能可堪稱文字編輯界的楷模,無人能比。這裡我們只討論如何利用批處理for來處理文字資料,請看下面的例子吧。

輸入命令:

for /f "tokens=1,2,3* delims=." %i in ("11.22.33.44") do @echo %i+%j+%k+%l

輸出結果:

11+22+33+44

來簡單的說明一下吧,上述命令是對字串「11.22.33.44」進行重新提取並處理,處理後的結果由echo顯示在螢幕上,tokens指的是「11.22.33.44」中句點的編號,3後面的星號表示「11.22.33.44」中第3個句點後面所有跟隨的字元都顯示出來,delims表示字串中是以什麼符號作為分隔符的,你也可以將delims寫成"delims=.,:;"表明有若干多分隔符。請注意,在有tokens出現的情況下,命令列中的%i %j %k %l必須得按這種順序出現在命令列中,且從i開始,分別代表乙個欄位的內容。

也可以將字段順序打亂並輸出,就像這樣,

輸入命令:

for /f "tokens=1,2,3* delims=." %i in ("11.22.33.44") do @echo %i+%k+%j+%l

輸出結果:

11+33+22+44

已經將k,j順序顛倒了。當然你高興的話,也可以隱藏一部分字段不讓它出現:d

上面是僅處理乙個字串而言,下面這行資料將對檔案進行批量處理,

假設檔案ips.txt中有諸如:

182.119.202.1

182.119.202.2

182.119.202.3

182.119.202.4

182.119.202.5

......

182.119.202.255 這樣的資料!

for /f "tokens=1,2,3* delims=." %i in (ips.txt) do @echo %i+%k+%j+%l

輸出結果:

182+202+119+1

182+202+119+2

182+202+119+3

182+202+119+4

182+202+119+5

......

182+202+119+255

ultraedit 正規表示式替換功能實現如下:

1. 按組合鍵ctrl+r

2. 選中"正規表示式"或"regular expressions"

3. 在要查詢字串編輯框中鍵入: ^(119^).^(202^)

4. 在替換字串編輯框中鍵入: ^2.^1

5. 替換

一旦你掌握了這些指令碼的方法,對提高工作效率相當有幫助,我們也沒必要再為這樣的小功能而單獨編寫乙個程式了。是不是省了很多麻煩呢?

挖掘 FOR 的潛力(3)

如何在多個檔案中查詢想要的資料?現使用 for 命令與 findstr 命令結合的方式,以達到我們的目的。演示步驟 1.在 d temp 目錄下有一堆文字檔案,stru001.xml,stru002.xml,stru003.xml,stru200.xml。2.在 d temp 目錄下建立一檔案列表檔...

挖掘FOR的潛力 4

前面三篇for文章對有關技巧做了些簡述,現在我將對for語句的靈活運用寫個詳細例子。情景介紹 我們要將某日誌檔案中特定內容的行資料搜尋出來,並再過濾出其中一部分我們所需要的資訊.比如,有乙個日誌檔案內容是這樣的 2007 05 01 00 00 00 statement1 2007 05 01 02...

挖掘FOR的潛力 4

前面三篇for文章對有關技巧做了些簡述,現在我將對for語句的靈活運用寫個詳細例子。情景介紹 我們要將某日誌檔案中特定內容的行資料搜尋出來,並再過濾出其中一部分我們所需要的資訊.比如,有乙個日誌檔案內容是這樣的 2007 05 01 00 00 00 statement1 2007 05 01 02...