Linux awk 系列文章之 awk 基礎語法語法及工作流

AWK是一種用於處理文本文件和強大的文本分析工具的語言。

AWK遵循一個簡單的工作流程 - 讀取,執行和重複。

一. AWK 工作流

Linux 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'[:#|]':定義多個分隔符


分享到:


相關文章: