linux高級運維必會命令——AWK命令詳解及實例分享

一、awk簡介

awk其名稱得自於它的創始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首個字母。實際上 AWK 的確擁有自己的語言: AWK 程序設計語言 , 三位創建者已將它正式定義為“樣式掃描和處理語言”。

awk 是一種很棒的語言,它適合文本處理和報表生成,其語法較為常見,借鑑了某些語言的一些精華,如 C 語言等。在 linux 系統日常處理工作中,發揮很重要的作用,掌握了 awk將會使你的工作變的高大上。 awk 是三劍客的老大,利劍出鞘,必會不同凡響。


二、語法詳解

awk '{pattern + action}' {filenames}

儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程序中始終出現,但它們用於根據特定的模式對一系列指令進行分組。 pattern就是要表示的正則表達式,用斜槓括起來。

awk語言的最基本功能是在文件或者字符串中基於指定規則瀏覽和抽取信息,awk抽取信息後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。

通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本。


三、awk 的原理

通過一個簡短的命令,我們來了解其工作原理。

[root@Gin/>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
.....................................................

[root@Gin/>hello,world

[root@Gin/>hiya
hiya
hiya
hiya

上面在調用 awk時,我們指定/etc/passwd 作為輸入文件。執行 awk 時,它依次對/etc/passwd 中的每一行執行 print 命令。

所有輸出都發送到 stdout,所得到的結果與執行 cat /etc/passwd 完全相同。

現在,解釋{ print }代碼塊。在 awk 中,花括號用於將幾塊代碼組合到一起,這一點類似於 C 語言。在代碼塊中只有一條 print 命令。在 awk 中,如果只出現 print 命令,那麼將打印當前行的全部內容。

再次說明, awk 對輸入文件中的每一行都執行這個腳本。

linux高級運維必會命令——AWK命令詳解及實例分享


$ awk -F":" '{ print $1 }' /etc/passwd
$ awk -F":" '{ print $1 $3 }' /etc/passwd
$ awk -F":" '{ print $1 " " $3 }' /etc/passwd
$ awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

-F參數:指定分隔符,可指定一個或多個

print 後面做字符串的拼接


四、實例

下面通過實例來了解下awk的工作原理:

實例一:只查看test.txt文件(100行)內第20到第30行的內容(企業面試)

#print $a取列

#NR取行數

[root@Gin/>


實例二:已知test.txt文件內容為:

[root@Gin>

I am Poe,my qq is 33794712

請從該文件中過濾出'Poe'字符串與33794712,最後輸出的結果為:Poe 33794712

[root@Gin/>Poe 33794712



上面是關於awk命令的相關用法,後面會分享更多linux方面內容,感興趣的朋友可以關注下

linux高級運維必會命令——AWK命令詳解及實例分享



分享到:


相關文章: