awk是一種用于處理文本、模式比對的程式設計語言。與sed和grep,俗稱Linux下的三劍客。學會 awk 等于你在 Linux 指令行裡,又多了一種處理文本的選擇。這篇文章重點教你如何使用,看完這篇文章,就大緻知道如何使用了,力求簡單使用。
在awk的文本處理規則裡,awk将文本檔案視為由字段和記錄組成的文本資料庫。預設情況下,awk将每一行視為一個記錄,也就是說記錄的分隔符是\n,記錄的分隔符可以通過内置變量RS更改。
在每一個記錄中,又把記錄分為若幹個字段,即記錄由字段組成,而字段的預設分隔符為空格或制表符。
和我們平常使用的 Linux 指令一樣, awk 也是遵循着某種格式來使用,格式如下:
注:可以左右拉動
其中,print 表示列印,$0 表示一整個記錄,test.txt 表示一個檔案。是以
表示把 test.txt 檔案裡面的每行記錄都列印出來。
剛才我們說,記錄是由字段組成的,且字段的預設分隔符是空格或者制表符。下面我們列印每一個記錄的第一個字段,如下:
$0 表示整個記錄,不過 $1, $2, $3.....則表示整個記錄中的第一個字段,第二個字段......。
剛才我們說字段的預設分隔符是空格或者制表符這些,預設意味着我們可以自己顯式着指定分隔符。下面我們用“:”來作為我們的分隔符吧。
上面我們用參數 -F 指定了我們的分隔符,即如果想要指定字段的分隔符,可以用參數 -F 指定分隔符。
在列印文本的時候,我們可以指定一些條件。格式如下:
例如我們指定分隔符為“:”,條件為第二個字段為"Java"的記錄。
列印奇數行的的第二個字段:
其中,NR 是一個内置的變量,表示目前正在處理的記錄,即目前的記錄是第幾個記錄。
和我們平常的程式設計一樣,awk 也提供了 if, else, while 等這些條件語句。
例如,列印第二個及其之後的記錄:
注意,上面的字段分隔符是空格了,并且 if 語句是在“{}” 裡指定的。
再看一個例子:
上面列印的是:如果第一個字段大于“s",則列印第一個字段,否則列印第二個字段。
awk 提供了一些内置函數來供我們使用,一下常用的函數如下:
例如,我們要把列印的字段轉化為大小
剛才我們說 NR 是一個表示目前正在處理的記錄是第幾個記錄的内置變量,常用的内置變量如下:
例如我們要列印每一個記錄的最後一個字段,就可以使用變量 NF 了。
對了,剛才那個 NR 的變量也是挺好用的,例如:
講到這裡就大緻結束了,這篇文章算是入門文章,屏蔽了很多細節,大緻介紹一下怎麼使用,更多具體用法,可以根據自己想要實作的功能去查找相關函數哦。
有收獲?點選底部卡片加個雞腿犒勞一下?
End -
你真的了解 i++, ++i 和 i+++++i 以及 i+++i++ 嗎?
談談NAT:什麼?全球IP和私有IP是什麼鬼?