【拔刀吧少年】之awk文本和数据处理编程语言
AWK
- 1. 什么是awk
- 2. 基本格式
- 3. 工作原理
- 4. 常見的內建變量(可直接用)
- 5. 按行輸出文本
- 6. 按字段輸出文本
- 7. 通過管道、雙引號調用shell命令
- 8. 小案例 :awk集合getline、數組的用法
1. 什么是awk
AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。
之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
相較于sed常常作用于一整個行的處理,awk則比較傾向于一行當中分成數個字段來處理,因為awk相當適合小型的文本數據。
2. 基本格式
awk后面接兩個單引號并加上大括號{ }來設置想要對數據進行的處理操作,awk可以處理后續接的文件,也可以讀取來自前個命令的標準輸,但如果awk主要是處理每一行的字段內的數據時,默認的字段分隔符為“空格鍵”或“Tab鍵”
3. 工作原理
逐行讀取文本,默認以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段保存到內建變量中, 并按模式或者條件執行編輯命令。
sed命令常用于一整行的處理,而awk比較傾向于將一行分成多個"字段"然后再進行處理。awk信息的讀入也是逐行讀取的,執行結果可以通過print的功能將字段數據打印顯示。在使用awk命令的過程中,可以使用邏輯操作符"&&“表示"與”、"“表示"或”、"!“表示"非”;還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取余和乘方。
4. 常見的內建變量(可直接用)
FS∶ 列分割符。指定每行文本的字段分隔符,默認為空格或制表位。與"-F"作用相同
NF∶ 當前處理的行的字段個數。
NR∶ 當前處理的行的行號(序數)。
$0∶當前處理的行的整行內容。
$n∶ 當前處理行的第n個字段(第n列)。
FILENAME∶ 被處理的文件名。
RS∶ 行分隔符。awk從文件上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是’\n’
FNR:awk當前讀取的記錄數,其變量值小于等于NR(比如當讀取第二個文件時,FNR是從0開始重新計數,而NR不會)。
NR==FNR:用于在讀取兩個或兩個以上的文件時,判斷是不是在讀取第一個文件。
5. 按行輸出文本
實例1:輸出全部內容
實例2:輸出第1到第3行的內容
實例3:輸出第1行和第3行的內容,輸出奇數和偶數行,像sed -n ‘n;p’
實例4:輸出包含指定字符的行
實例5:輸出包含指定字符的行并統計有多行
分析:
BEGIN模式表示,在處理指定的文本之前,需要先執行BEGIN模式中指定的動作;
awk再處理指定的文本,之后再執行END模式中指定的動作;
END{ } 語句塊中,往往會放入打印結果等語句。
6. 按字段輸出文本
實例1:輸出指定分隔符的指定字段
實例2:輸出指定字段在指定范圍內的行,并選擇輸出的字段
實例3:awk結合三元運算符的使用。
實例4:輸出行和內容
實例5:輸出指定字段中包含指定字符的行,然后輸出指定字段。
7. 通過管道、雙引號調用shell命令
實例1:輸出文本內容,結合awk以指定字符為分隔符,然后統計出行數。
實例2:awk結合管道命令使用
實例3:查看當前內存使用百分比
實例4:查看當前系統的CPU的空閑率
實例5:顯示上次系統重啟的時間
8. 小案例 :awk集合getline、數組的用法
案例1:統計在線用戶的數量
分析:
當getline左右無重定向符“<”或“1”時,awk首先讀取到了第一行,就是1,然后getline, 就得到了1下面的第二行,就是2,因為getline之后,awk會改變對應的NF, NR,FNR和$0等 內部變量,所以此時的$0的值就不再是1,而是2了,然后將它打印出來。
當getline左右有重定向符“<”或“I”時,getline則作用 于定向輸入文件,由于該文件是剛打開,并沒有被awk讀入一行,只是getline讀入那么getline返回的是該文件的第一行, 而不是隔行。
案例2:分別顯示0到10的奇數和偶數行
案例3:指定分隔符來分隔字符串
$1=$1是用來激活$0的重新賦值,也就是說
字段$1…和字段數NF的改變會促使awk重新計算$0的值,通常是在改變OFS后而需要輸出$0時這樣做
案例4:使用awk創建數組,并循環
案例5:使用awk來統計httpd訪問日志中每個客戶端IP出現的次數,超過三次進行提示。
awk ‘/Failed password/ {ip[$11]++}; END {for(i in ip){print i,ip[i]}}’ /var/log/secure
1.先測試好提取ip和次數的正確命令,方便我們直接在腳本里面使用。
2.根據第一步的命令再次使用awk進行ip和次數的提取,然后做個if判斷即可。
3.測試結果
總結
以上是生活随笔為你收集整理的【拔刀吧少年】之awk文本和数据处理编程语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【拔刀吧少年】之sed编辑器
- 下一篇: 【拔刀吧少年】之sort uniq tr