AWK是一種用於處理文本文件和強大的文本分析工具的語言。
AWK遵循一個簡單的工作流程 - 讀取,執行和重複。
一. AWK 工作流
awk腳本通常由三部分組成,如上述工作流描述:BEGIN塊、BODY塊和END塊。
BEGIN塊
開始語句,用於預處理和格式打印等操作,可選;
BEGIN 是awk 關鍵字,必須大寫。
BODY塊
該塊是awk命令的核心。它由三部分組成:
- Read
awk從輸入流(文件、管道或標準輸入)讀取一行並將其存儲在內存中;
- Execute
所有awk命令都按順序應用於輸入。默認情況下,awk為輸入的每一行執行命令。但是,我們可以將其限制為指定的模式。
- Repeat
重複上述過程直到文件結束。
此部分沒有關鍵字存在。
END塊
結束預計,可以用於打印通用報告等操作,可選。
END是awk 關鍵字,必須大寫。
執行流程:
步驟1:執行BEGIN {commands}語句塊中的語句;
步驟2:從文件或標準輸入(stdin)讀取一行,然後執行模式{commands}塊,逐行掃描文件並重復從第一行到最後一行的過程,直到讀取所有文件;
步驟3:當讀到輸入流的末尾時,執行END {commands}語句塊。
二. AWK 基礎語法
基礎格式
awk [options] 'pattern{ commands }' file
完整格式
awk [-F|-f|-v] 'BEGIN{ commands } pattern{ commands } END{ commands }' file
-F:指定分隔符
-f:調用腳本
-v:定義變量 var = value
語法示例
$ ls -l /usr/bin | awk ' BEGIN { print "Directory Report" print "================" } NF > 9 { print $9, "is a symbolic link to", $NF } END { print "=============" print "End Of Report" } '
AWK 變量
$0:表示整個當前行 $1:每行第一個字段 NF:一條記錄的字段的數目 NR:行號,從1開始,多文件記錄增量 FNR:與NR類似,但多文件記錄不會增加,每個文件從1開始 FS:定義分隔符 RS:輸入記錄分隔符,默認為換行符 〜:匹配正則表達式 !〜:不匹配正則表達式 ==:相等,必須全部相等,準確比較 !=:不相等,精確比較 &&:與 ||: 或 OFS:輸出字段分隔符,默認也是空格,可以更改為製表符等 ORS:輸出記錄分隔符,默認為換行符,也就是說,處理結果也逐行輸出到屏幕 -F'[:#|]':定義多個分隔符