Awk記錄和域
awk認為輸入的檔案是結構的,将每個輸入檔案行定義為記錄,行中的每個字元串定義為域,域之間用空格、TAB鍵或其他符号分隔,這些符号叫做分隔符。
awk預設空格鍵是分隔符,TAB鍵被認為是連續的空格鍵來處理(兩個或多個連續的空格鍵或tab鍵當作一個分隔符處理)。
awk可以用-F選項改變分隔符(-F表示改變分隔符,-f表示調用awk腳本);還可以通過在BEGIN字段設定環境變量FS來改變分隔符。舉例:
awk -F“\t” '{print $3}' /proc/devices //将分隔符該做 /t TAB鍵
awk ' BEGIN {FS = “\t”}{print$3} ' /proc/devices //将分隔符該做 /t TAB鍵
awk定義域操作符$指定執行動作的域,域操作符$後面跟的數字和變量來辨別域的位置,每條記錄的域從1開始編号,$1表示第一個域,$2表示第二個域,$0表示所有域。舉例(分隔符為空格鍵):
Li Hua 1234567
(n個空格) (n個TAB鍵)
第一個域($1) 第一個域($2) 第一個域($3)
awk '{print $1 $2 $3}' input //列印三個域的字元串
awk 'BEGIN{one = 1; two = 2}{print $(one+two)}' input //列印第三個域的字元串
awk '{print $0}' input //列印所有域的字元串
不同的輸入檔案,需要根據實際情況設定相應的分隔符,也可以通過正規表達式将分隔符設定為多個字元。示例:
- FS = “\t” 将一個tab鍵作為分隔符
-
FS = “\t+” 将一個或多個tab鍵作為分隔符
對記錄 waz\t\tcq, 1會解釋為 waz 空域 cq三個域 , 2 會解釋為 waz cq 兩個域
本文完全參照 <linux shell 程式設計從初學到精通> 華清遠見嵌入式教育訓練中心 伍之昂等編著