awk的簡單使用

 AWK是一種優良的文本處理工具。它不僅是 Linux 中也是任何環境中現有的功能最強大的數據處理引擎之一。下面讓我們一起來學習這個強大工具的使用把!!!,

 

 

1) 基本語格式

awk [options] 'action' file file

awk [options] 'PATTERN{action}' file file.....

2) awk的輸出方式

#==============

print [item1,item2...]

如果item被省略,則默認輸出整行,即爲$0,

如果想輸出空白,使用print “”

#===============

printf  format, item.....

注意:默認不會自動換行,需要換行要使用/n

format中可以使用的修飾符

    %c:顯示爲accii

    %d,%i:顯示十進制整數

    %e,%E:科學計數法顯示

    %f:顯示浮點數

    %g,%G:以科學計數法格式或浮點數格式顯示數值

    %u:顯示無符號整數

    %s:顯示字符串

    %%:顯示一個%

    修飾符格式控制字符(用在%和字母中間,%20s)

    #:顯示#個字符的寬度

    #.*:*表示數值類型取值精度

    -:左對齊,默認爲右對齊

    +:顯示數值符號

    

3) awk的輸出重定向

    print items > output-file

    print items >> output-file

    print items | command

    特殊文件描述符:

    /dev/stdin: 標準輸入

    /dev/stdout: 標準輸出

    /dev/stderr: 錯誤輸出

4) awk的操作符

算數運算符

 

x+y:加法運算

x-y:減法運算

x*y:乘法運算

x/y:除法運算

x%y:取模

x**y,x^y:xy次方

 

賦值操作符:

 

= :將後邊的值賦值給前邊

    x+=y :

    x-=y:

    *=

    /=

    %=

    ^=;**=

    ++

    --

 

比較操作符:

<  :小於

<= :小於等於

>  :大於

>= :小於

== :等於

!= :不等於

~:模式匹配,左邊的字符串能夠被右邊的模式所匹配爲真,否則爲假;

!~:模式匹配,左邊的字符串能夠被右邊的模式所匹配爲假,否則爲\真;

邏輯操作符:

||:或操作,如果前邊爲真,則執行後後邊的語句

&&:與操作;如果前邊爲假,則執行後邊的語句

字符串運算

    連接

 

條件表達式:

    A?B:C:如果A條件成立,則執行B,否則執行C語句

函數調用方式:

      fuction_name(arg1,[arg2][,....])

 

5) awk中的模式:

    正則表達式:格式爲/PATTERN/

        僅處理被pattern匹配到的行

    Expression::表達式,其結果爲非零或非空字符串時滿足條件

        僅處理滿足條件的行

    Ranges:行範圍,startline,endline

    處理範圍內的行

    BEGIN/END:特殊模式,

    僅在awkprogream運行前BEGIN或運行後END執行一次

    Empty:空模式,

    匹配任意行,

6) awk常見的action

    .Exporessions

    .控制語句

    .組合語句

    .輸入語句

    .輸出語句

7) awk中的控制語句

1.if-else語句

if (判斷語句){條件爲真語句} else {條件爲假語句}

2.while語句

while (判斷語句) {循環體}

循環,直到條件不滿足位置

3.di-while語句

do {循環體} while (判斷語句)

先執行一遍循環體,再進行判斷是否進入循環,直到條件不滿足時跳出循環

4.for循環

for (變量定義;判斷條件;修正語句){循環體}

執行順序爲:定義變量-->判斷條件-->條件爲真-->執行循環體 -->修正語句 -->跳轉到條件判斷

->條件爲假,跳出循環

5.case語句

swatch (expression) {case Value:語句;case /Expression/:語句2.......default:語句N}

 

6.循環控制語句

break:提前跳出循環

continue:提前跳出本輪循環,進入下一輪循環

7.next

提前跳出對本行的處理,轉而對下一行進行處理

8) 數組

關聯數組

arrary_name[下標]

 

下標可以使用任意字符串如果某數組元素事先不存在,那麼在引用時,awk會自動創建此元素並將其初始化爲空串;因此,要判斷某數組是否存在某元素,必須使用“index in array”這種格式進行判斷

 

在關聯數組中要遍歷數組中的每一個元素,需要使用如下特殊結構:

for (var in array) {for body}

數組元素的刪除

delete arrary_name[下標]

9) awk中的一些內置函數

split(字符串,數組名[,分隔符])

如果沒有指定分隔符,默認爲FS

此函數的返回值爲切片後的元素格式

 

length(String)

返回字符串的長度

substr(String,Start[,Length])

取字符串中的子串,Start開始取String長度爲Length的字符串

10) 兩個AWK小例子

#返回當前各種類型的TCP連接的個數
[root@host1 ~]# netstat -tnap |awk '/^tcp/{state[$6]++}END{for (i in state) {print i,":",state[i]}}'
ESTABLISHED : 1
LISTEN : 10
 
#返回每個IP地址的連接數
[root@host1 ~]# netstat -tn | awk '/^tcp/{split($5,ip,":");ipsum[ip[1]]++}END{for (i in ipsum) {printf "%s\t%s\n",i,ipsum[i]}}'
172.16.21.2514

#格式控制字符的使用
[root@host2 tawk 'BEGIN{printf "%15s %s\n","abcde","12345"}'
              abcde 12345
[root@host2 test]# awk 'BEGIN{printf "%-15s %s\n","abcde","12345"}'
    abcde           12345


 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章