天天看點

運維的shell小編(6)

 第六章:awk程式設計

Grep主要是作為過濾工具使用,sed是一個文本編輯sed更多的是比對,進行替換和删除。 ,awk是一個報告生成語句,awk程式設計是shell腳本的常用的指令。

Awk格式:

awk '

BEGIN{ print "start"} 

pattern { commands } 

END{ print "end"}'

file 

Awk主要作用是對檔案進行切片,例1:我們通過action輸出print $1第一個字段。

<a href="http://blog.51cto.com/attachment/201209/234455128.png" target="_blank"></a>

Awk預設的分隔符是空格,我們可以使用-F:參數指定字段分隔符

<a href="http://blog.51cto.com/attachment/201209/234516245.png" target="_blank"></a>

我們可以使用$NF,顯示一行最後一個字段

<a href="http://blog.51cto.com/attachment/201209/234526312.png" target="_blank"></a>

我們可以-v參數自定義變量

<a href="http://blog.51cto.com/attachment/201209/234540785.png" target="_blank"></a>

輸出時我們需要使用,分開不同字段,如果要指定字段分隔符可以使用,-v OFS“分隔符”指定分隔符

<a href="http://blog.51cto.com/attachment/201209/234551410.png" target="_blank"></a>

輸出4-6行

<a href="http://blog.51cto.com/attachment/201209/234601448.png" target="_blank"></a>

輸出時print和printf是有很大不同的,printf是可以定義格式的,預設不換行,并右對齊,-左對齊,定義格式之間不用分隔符

常用格式:\n換行,%s顯示字元串,%d十進制數,%e科學計數顯示值……

<a href="http://blog.51cto.com/attachment/201209/234629338.png" target="_blank"></a>

Awk -F: '$1 ~ /^root/ {print $1,$2}' /etc/passwd  //$1 ~/比對/是指比對,後面的跟的是正則比對root開頭的字元。

<a href="http://blog.51cto.com/attachment/201209/234651365.png" target="_blank"></a>

任意行比對bash的輸出

<a href="http://blog.51cto.com/attachment/201209/234701988.png" target="_blank"></a>

判斷在輸出

<a href="http://blog.51cto.com/attachment/201209/234711749.png" target="_blank"></a>

輸出字段加标題,我們可以使用BEGIN{print  “usr   id”}指定

<a href="http://blog.51cto.com/attachment/201209/234721925.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201209/234728232.png" target="_blank"></a>

Begin也可以用來指派

<a href="http://blog.51cto.com/attachment/201209/234738810.png" target="_blank"></a>

Awk也可以接一些邏輯詞if for等

<a href="http://blog.51cto.com/attachment/201209/234750744.png" target="_blank"></a>

對每個字段進行切片

<a href="http://blog.51cto.com/attachment/201209/234803723.png" target="_blank"></a>

顯示所有偶數字段

<a href="http://blog.51cto.com/attachment/201209/234814482.png" target="_blank"></a>

Begin指派,如果要引用字元串要加引号

<a href="http://blog.51cto.com/attachment/201209/234825409.png" target="_blank"></a>

介紹一個重要應用,如awk中b in a 表示b記錄a的下标,a[b]則為依次輸出a的值。

<a href="http://blog.51cto.com/attachment/201209/234836321.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201209/234847151.png" target="_blank"></a>

對日志通路ip進行統計

<a href="http://blog.51cto.com/attachment/201209/234857339.png" target="_blank"></a>

本文轉自zsaisai 51CTO部落格,原文連結:http://blog.51cto.com/3402313/1009541