今天來說Awk的使用,首先來介紹awk的工作原理。
Awk的工作原理:將文件1行1行讀入,然后對每行再分段,段名稱為$加上數字,分段根據是空格或Tab鍵。
用法:awk '/模式/{命令1;命令2;...}' filename
其中上面的模式沒有的話就是對全文所有行進行操作,多條命令用分號隔開。
例如who命令結果以下
比如我們想得到日期,那末命令以下
awk默許分隔符為空格或Tab,有時候需要自己指定分隔符。比如
可以看出在/etc/passwd文件中,每行是用冒號隔開的,1共有7部份,如果想得到最后1部份的內容,那末需要指定分隔符,使用以下命令
F:表示以冒號作為分隔符。不過這是對所有行進行操作,有時候我們只需要指定1些行來操作。以下
表示只操作含有root的行。
上面用到了$符號,注意$0表示1行的所有內容。例如
那末假定我們有時候需要找某1列中含有特定字符串的行怎樣辦呢 ?比如
表示打印每行第1部份含有root的所有行。
Awk在把1行內容讀入內存之前,可以先做1些其它的操作,具體格式以下
awk 'BEGIN{命令}/模式/{命令1;命令2;...}' filename
BEGIN{命令} 表示在讀入當前行的數據之前,先履行BEGIN中的命令。
除輸入時的分隔符,輸出時也有分隔符,默許是空格,如果需要重新指定,那末用以下命令
除BEGIN,還有END操作符。以下命令
在開始處,我們學過,awk是把文件1行1行讀入的,每行依照特定的字符分隔成很多段,那末我們怎樣知道某1行是分成多少段呢? 那末就用NF這個變量。例如
表示who命令得到的文件每行分為5個字段。
除NF以外,還有NR,NR表示當前的處理行在源文件中是第幾行。例如
除系統自帶的變量外,如NF,NR,awk還可以自定義變量。例如
好了,到了這里,關于Awk的基本用法已就講完了,每一個部份都需要深入理解才行,Mayuyu希望都能熟練應用。