AWK
Download
1 / 17

AWK 入門 - PowerPoint PPT Presentation


  • 118 Views
  • Uploaded on

AWK 入門. Advisor: Quincy Wu Speaker: Kuan-Ta Lu Date: July 8, 2010. What Is AWK?. 是一種可以處理資料、產生格式化報表的語言,功能相當強大。 awk 的工作方式是讀取資料檔,將每一列資料視為一筆記錄( record ),每筆記錄以欄位分隔符號分成若干欄位,然後,輸出各個欄位的值。 需要具備正規表示式的基本知識。. awk 的用法 (1). awk ' 條件類型 1{ 動作 1} 條件類型 2{ 動作 2} ...' filename

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' AWK 入門' - ataret


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

AWK 入門

Advisor: Quincy Wu

Speaker: Kuan-Ta Lu

Date: July 8, 2010


What is awk
What Is AWK?

  • 是一種可以處理資料、產生格式化報表的語言,功能相當強大。

  • awk的工作方式是讀取資料檔,將每一列資料視為一筆記錄(record),每筆記錄以欄位分隔符號分成若干欄位,然後,輸出各個欄位的值。

  • 需要具備正規表示式的基本知識。


Awk 1
awk 的用法 (1)

  • awk '條件類型1{動作1} 條件類型2{動作2} ...' filename

  • $ awk '{ print }' /etc/passwd

  • $ awk -F":" '{ print $1 }' /etc/passwd

  • $ ls -l /etc | awk '{print $1 "\t" $9}'


Awk 2
awk 的用法 (2)

  • $ awk '{print $2,$3}' emp_names

  • $ awk '/AL/ {print $3,$2}' emp_names

  • $ awk '/AL/ {print $3,$2 ; print $4,$5}' emp_names

    • $ awk '/AL/ {print $3,$2} {print $4,$5}' emp_names

    • $ awk '/AL/ {print $3,$2 ; print $4", "$5"\n"}' emp_names


Awk 3
awk 的用法 (3)

  • $ awk '/AL|IN/' emp_names

  • $ awk '$5 ˜ /AR/' emp_names

    • $ awk '$5 !˜ /AR/' emp_names


Awk 11
awk 的變數 (1)

  • 變數

    • NF 每一行 ($0) 擁有的欄位總數

    • NR 目前 awk 所處理的是『第幾行』資料

    • FS 目前的分隔字元,預設是空白鍵

    • RS 記錄的分隔字元,預設是行

    • OFS 輸出分隔字元

    • ORS 輸出記錄分隔字元,預設是行

  • $ last | awk '{print $1 "\t lines: " NR "\t columes: " NF}'


Awk 21
awk 的變數 (2)

  • $ awk '{FS=":"}{print $2}' mou_names

  • $ awk -F":" '{OFS="-"}{print $1,$2,$3,$4,$5}' mou_names

  • $ awk -F":" '{print NR,$1,$2,$3}' mou_names

  • $ awk -F":" '/4601[2-5]/' mou_names


Awk 12
awk 的運算 (1)

  • 邏輯運算

    • > 大於

    • < 小於

    • >= 大於或等於

    • <= 小於或等於

    • == 等於

    • != 不等於

  • 數學運算

    • + adds numbers together

    • - subtracts

    • * multiplies

    • / divides


Awk 22
awk 的運算 (2)

  • ^ performs exponential mathematics

  • % gives the modulo

  • ++ adds one to the value of a variable

  • += assigns the result of an addition operation to a variable

  • -- subtracts one from a variable

  • -= assigns the result of a subtraction operation to a variable

  • *= assigns the result of multiplication

  • /= assigns the result of division

  • %= assigns the result of a modulo operation

  • cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'


  • Awk 31
    awk 的運算 (3)

    • $ cat pay | awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}

      NR>=2{total=$2+$3+$4

      printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}‘

    • $ awk '{print $1,"QTY: "$2,"PRICE: "$3,"TOTAL: "$2*$3}' inventory


    Awk 4
    awk 的運算 (4)

    • $ awk '{x=x+$2} {print x}' inventory

    • $ awk '{x=x+($2*$3)}{print $1,"QTY: "$2,"PRICE: "$3,"TOTAL: "$2*$3,"BAL: "x}' inventory

    • $ awk '{x=x+($2*$3)} {print $1,"QTY: "$2,"PRICE: "$3,"TOTAL: "$2*$3} END {print "Total Value of Inventory: " x}' inventory


    Awk 5
    awk 的運算 (5)

    • $ sort emp_names | awk '{print $3,$2}'

    • $ awk '{print NR, $1 > "/tmp/filez" }' emp_names

    • $ awk '{ print $2 | "sort" }' emp_names


    Example 1
    Example (1)

    $ cat N

    # just a test

    33 22 999 223

    44 55 99

    $ ./g-than N

    # just a test

    999

    223

    99

    $ cat g-than

    #!/bin/awk -f

    BEGIN{

    lowerbound = 55

    }

    /^#/ {

    print $0

    }

    ! /^#/ {

    for(i=1; i<=NF; i++)

    if( $i > lowerbound )

    print $i

    }


    Example 2
    Example (2)

    $ cat > IN

    233 112 33

    # oh!, just a test

    # again

    333 hi kk 22

    $ ./sum-fields IN

    =378

    # oh!, just a test

    # again

    hikk=355

    $ cat sum-fields

    #!/bin/awk -f

    /^#/ {

    print $0

    }

    ! /^#/ {

    name = ""

    sum = 0

    for(i=1; i<=NF; i++)

    if( $i ~ /[0-9][-9]*/ )

    sum = sum + $i

    else

    name = name $i

    print name "=" sum

    }


    Example 3
    Example (3)

    $ cat > IN-num

    klim 233 112 33

    # oh!, just a test

    # again

    milk 333 22

    klim 999 22

    oak 222

    redcow 1023

    oak 11

    milk 333 22

    $ ./sum-vars IN-num

    # oh!, just a test

    # again

    redcow = 1023

    klim = 1399

    oak = 233

    milk = 710

    $ cat > sum-vars

    #!/bin/awk -f

    /^#/ {

    print $0

    }

    ! /^#/ {

    name = $1

    sum = 0

    for(i=2; i<=NF; i++)

    sum += $i

    var[ name ] += sum

    }

    END{

    for (v in var) printf "%s = %d\n", v, var[v]

    }


    Exercises
    Exercises

    • /etc/passwd 以冒號 “:“ 作為欄位的分隔,如何查閱第三欄小於等於 50 以下的數據,並且僅列出帳號與第三欄以tab隔開?

    • 利用awk計算出檔案sshreport.pl有幾行空白行?

    • 寫一個awk script, 功能如下:

    $./ex.awk ex-input

    oak 355

    klim 9019

    ryan 73

    redcow 40000

    $ cat ex-input

    # klim

    23 33 22 11

    8888

    42

    # oak

    1000 200 2200

    -22

    -3000 -20

    -3

    # redcow

    20000 20000

    # ryan

    73 94

    -94


    Reference
    Reference

    • http://www.oracle.com/technology/pub/articles/dulaney_awk.html

    • http://www.cyut.edu.tw/~dywang/linuxProgram/node20.html

    • http://www.vectorsite.net/tsawk_2.html

    • http://www.study-area.org/cyril/scripts/scripts/node61.html

    • http://www.grymoire.com/Unix/Awk.html

    • http://nixchun.pixnet.net/blog/post/21760238

    • http://erdos.csie.ncnu.edu.tw/~klim/


    ad