一.基本介紹
1.awk:
awk是一個強大的文本分析工具,在對文本文件的處理以及生成報表,awk是無可替代的。awk認爲文本文件都是結構化的,它將每一個輸入行定義爲一個記錄,行中的每個字符串定義爲一個域(段),域和域之間使用分割符分割。
2.功能:流控制、數學運算、進程控制、內置的變量和函數、循環和判斷
3.工作原理:
awk 會把每行進行一個拆分,用相應的命令對拆分出來的“段”進行處理。
(1)行工作模式,讀入文件的每一行,會把一行的內容,存到$0裏
(2)使用內置的變量FS(段的分隔符,默認用的是空白字符),分割這一行,把分割出來的每個段存到相應的變量$(1-100)
(3)輸出的時候按照內置變量OFS(out FS),輸出
(4)讀入下一行繼續操作
簡單實例
[root@tx3 ~]# echo "this is a book" > awk.txt
[root@tx3 ~]# awk '{print $2,$1,$3,$4}' awk.txt
is this a book
4. Awk常用內置變量表:
1 $0 當前記錄(作爲單個變量)
2 $1~$n 當前記錄的第n個字段,字段間由FS分隔
3 FS 輸入字段分隔符 默認是空格
4 NF 當前記錄中的字段個數,就是有多少列
5 NR 已經讀出的記錄數,就是行號,從1開始
6 RS 輸入的記錄他隔符默 認爲換行符
7 OFS 輸出字段分隔符 默認也是空格
8 ORS 輸出的記錄分隔符,默認爲換行符
9 ARGC 命令行參數個數
10 ARGV 命令行參數數組
11 FILENAME 當前輸入文件的名字
12 IGNORECASE 如果爲真,則進行忽略大小寫的匹配
13 ARGIND 當前被處理文件的ARGV標誌符
14 CONVFMT 數字轉換格式 %.6g
15 ENVIRON UNIX環境變量
16 ERRNO UNIX系統錯誤消息
17 FIELDWIDTHS 輸入字段寬度的空白分隔字符串
18 FNR 當前記錄數
19 OFMT 數字的輸出格式 %.6g
20 RSTART 被匹配函數匹配的字符串首
21 RLENGTH 被匹配函數匹配的字符串長度
常見參數:
常用命令選項
-F fs
fs 指定輸入分隔符,fs可以時字符串或正則表達式-v var=value
賦值一個用戶定義變量,將外部變量傳遞給awk-f scriptfile
從腳本文件中讀取awk命令
例:打印第一行最後一個字段(使用:分割)
[root@tx3 ~]# awk -F: 'NR==1{print $NF}' p1
/bin/bash
awk腳本基本格式
- awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
一個awk腳本通常由BEGIN, 通用語句塊,END語句塊組成
,三部分都是可選的。 腳本通常是被單引號或雙引號包住。
awk執行過程分析
第一步: 執行
BEGIN { commands } pattern
語句塊中的語句BEGIN語句塊:在awk開始從輸入輸出流中讀取行之前執行,在BEGIN語句塊中執行如變量初始化,打印輸出表頭等操作。
第二步:從文件或標準輸入中讀取一行,然後執行
pattern{ commands }
語句塊。它逐行掃描文件,從第一行到最後一行重複這個過程,直到全部文件都被讀取完畢。pattern語句塊:pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則默認執行{ print },即打印每一個讀取到的行。
{ }
類似一個循環體,會對文件中的每一行進行迭代,通常將變量初始化語句放在BEGIN語句塊中,將打印結果等語句放在END語句塊中。第三步:當讀至輸入流末尾時,執行
END { command }
語句塊END語句塊:在awk從輸入流中讀取完所有的行之後即被執行,比如打印所有行的分析結果這類信息彙總都是在END語句塊中完成,它也是一個可選語句塊。