【Linux】awk工具使用方法__Linux

來源:互聯網
上載者:User
詳解 awk 工具的使用方法 Jarly 發表

當你第一次拿起雙手在電腦上使用 awk 命令處理一個或者多個檔案的時候,它會依次讀取檔案的每一行內容, 然後對其進行處理,awk 命令預設從 stdio 標準輸入擷取檔案內容, awk 使用一對單引號來表示 一些可執行檔指令碼代碼,在可執行指令碼代碼裡面,使用一對花括弧來表示一段可執行代碼塊,可以同時存在多個代碼塊。 awk 的每個花括弧內同時又可以有多個指令,每一個指令用分號分隔,awk 其實就是一個指令碼程式設計語言。說了這麼多,你肯定還是一臉的懵逼。你猜對了,上面這些都是廢話。先別急,客官請往下看。。。

awk 命令的基本格式

awk [options] 'program' file

options 這個表示一些可選的參數選項,反正就是你愛用不用,不用可以拉到。。。program 這個表示 awk 的可執行指令碼代碼,這個是必須要有的。file 這個表示 awk 需要處理的檔案,注意是純文字檔案,不是你的 mp3,也不是 mp4 啥的。。

先來一個 awk 的使用例子熱熱身

$ awk '{print $0}' /etc/passwd

awk 命令的可執行指令碼代碼使用單引號括起來,緊接著裡面是一對花括弧,記住是 "花括弧" 不是 "花姑娘",然後花括弧裡面就是一些可執行檔指令碼程式碼片段,當 awk 每讀取一行之後,它會依次執行雙引號裡面的每個指令碼程式碼片段,在上面這個例子中,$0 表示當前行。當你執行了上面的命令之後,它會依次將 /etc/passwd 檔案的每一行內容列印輸出,你一定在想:這有個毛用,用 cat 命令也能搞定。沒錯。上面這個命令沒個毛用,請往下看。

awk 自訂分隔字元

awk 預設的分割符為空白格和定位字元,我們可以使用 -F 參數來指定分隔字元

$ awk -F ':' '{print $1}' /etc/passwdrootbindaemonadmlpsyncshutdownhaltmailoperatorgamesftpnobody

上面的命令將 /etc/passwd 檔案中的每一行用冒號 : 分割成多個欄位,然後用 print 將第 1 欄欄位的內容列印輸出

如何在 awk 中同時指定多個分隔字元

比如現在有這樣一個檔案 some.log 檔案內容如下

Grape(100g)1980raisins(500g)1990plum(240g)1997apricot(180g)2005nectarine(200g)2008

現在我們想將上面的 some.log 檔案中按照 "水果名稱(重量)年份" 來進行分割

$ awk -F '[()]' '{print $1, $2, $3}' some.logGrape 100g 1980raisins 500g 1990plum 240g 1997apricot 180g 2005nectarine 200g 2008

在 -F 參數中使用一對方括弧來指定多個分隔字元,awk 處理 some.log 檔案時就會使用 "(" 和 ")" 來對檔案的每一行進行分割。

awk 內建變數的使用

$0 這個表示文本處理時的當前行

$1 表示文本行被分隔後的第 1 個欄位列

$2 表示文本行被分割後的第 2 個欄位列

$3 表示文本行被分割後的第 3 個欄位列

$n 表示文本行被分割後的第 n 個欄位列

NR 表示檔案中的行號,表示當前是第幾行

NF 表示檔案中的當前行列的個數,類似於 mysql 資料表裡面每一條記錄有多少個欄位

FS 表示 awk 的輸入分隔字元,預設分隔符號為空白格和定位字元,你可以對其進行自訂設定

OFS 表示 awk 的輸出分隔字元,預設為空白格,你也可以對其進行自訂設定

FILENAME 表示當前檔案的檔案名稱,如果同時處理多個檔案,它也表示當前檔案名稱

比如我們有這麼一個文字檔 fruit.txt 內容如下,我將用它來向你示範如何使用 awk 命令工具,順便活躍一下此時尷尬的氣氛。。

peach    100   Mar  1997   ChinaLemon    150   Jan  1986   AmericaPear     240   Mar  1990   Janpanavocado  120   Feb  2008   china

我們來瞧一瞧下面這些簡單到爆炸的例子,這個表示列印輸出檔案的每一整行的內容

$ awk '{print $0}' fruit.txtpeach    100   Mar  1997   ChinaLemon    150   Jan  1986   AmericaPear     240   Mar  1990   Janpanavocado  120   Feb  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.