gawk Notes(2)

來源:互聯網
上載者:User

> pattern的細化

首先說下BEGIN和END之間的多個模式的執行順序,我寫了下面的程式來驗證下:

圖1 多個模式的執行順序驗證(資料檔案為cars)

如,BEGIN,END中間有三個模式,預設模式,判斷出廠時間($3>2000),判斷品牌($1 ~ /ford/),運行結果如下:

圖2 運行結果

可見,對資料檔案中的一條記錄,gawk的多個檔案是依次匹配的。

· pattern中用到的文法和運算子:

1、Regex

1中看到的,用 / / 將Regex括起來,即可將該運算式作為模式使用:

單獨的“ /ford/ ” 表示用該運算式匹配整個記錄

也可以至少用“ ~ ”,如“$1 ~ /ford/”,表示指定欄位作為匹配對象,匹配對象可以是欄位,也可以使變數。

“!~ ”表示不滿足匹配。

2、關係操作符

可以使用<,<=,==,!=,>=,> 等關係操作符進行數值和字串比較

3、布林運算子

可以使用 ||(OR)和&&(AND)來組合任何模式

· 特殊符號

, (逗號)

範圍操作符 如果一個gawk程式行上用逗號將兩個模式隔開,

gawk選取從匹配第1個模式的第1行開始的文本行。

gawk選取的最後一行是匹配第2個模式的那行緊接著的下一行文本。如果沒有匹配第2個模式的文本航,gawk將選取知道輸入末尾的所有文本行。

在gawk找到第2個模式之後,它將再次尋找第1個模式以再次開始這個過程。

eg.

圖3 cars資料檔案

圖4 逗號算符樣本1

圖5 逗號算符樣本2

看樣本1,“awk '/volvo/,/bmw/' cars”, 先匹配/volvo/,從第4行開始,匹配成功,然後要匹配/bmw/,到第7行。然後,重新開始匹配/volvo/,找不到,到檔案末尾,結束。

樣本2,“awk '/chevy/,/ford/' cars”,先匹配/chevy/,從第一行開始,匹配成功,然後匹配/ford/,第一組取到2、3行資料,又從/chevy/開始,雖然cars中第5行為ford,但是現在匹配的是/chevy/,所以被跳過了。可見,逗號分隔的兩個匹配,是有先後順序的。

> 幾個特殊符號

單引號'

在命令列上建立的gawk程式中間包含空格或特殊的shell字元,則必須用單引號將程式括起來。

gawk寫在shell檔案中時:

單引號用來從shell中擷取變數值

圖6 單引號樣本

雙引號"

使用了雙引號,gawk將進行本文比較,即使用ASCII排序序列作為比較基礎

圖7 雙引號樣本

如果是進行數值比較,則不用雙引號

圖8 數值比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.