awkRegex和內建函數的使用方法執行個體詳解_linux shell

來源:互聯網
上載者:User

awkRegex及內建函數執行個體詳解:

1、模糊比對:

複製代碼 代碼如下:

awk ‘{if($3~/97/) print $0}' data.f:如果第三項中含有”97”則列印該行
awk ‘{if($4!~/ufcx/) print $0}' data.f:如果第三項中不含ufcx有則列印

2、精確匹配:

複製代碼 代碼如下:

awk ‘{if($5==66) print $0}' data.f:如果第五項是66則列印
awk ‘{if($5!=66)print $0}' data.f : 如果第五項不是66則列印
awk ‘{if($1>$5) print $0}' data.f:如果第一項大於第五項則列印

3、大小寫匹配:

複製代碼 代碼如下:

awk ‘{if(/[Ss]ept/) print $0}' data.f:符合,則列印一行。
awk ‘/[Ss]ept/ {print $2}' data.f:符合,則列印第二欄位

4、任意匹配:

複製代碼 代碼如下:

awk ‘{if($2 ~/^.e/) print $0}' data.f:第二欄位中,第二個字元為e,輸出
awk ‘{if($4 ~/(lps|fcx)/) print $0}' data.f:第四個欄位含有lps或fcx則輸出

5、&&,||:

複製代碼 代碼如下:

awk ‘{if($3 ~/1993/ && $2==”sept”) print $0}' data.f:兩邊都真則輸出
awk ‘{if($3 ~/a9/ || $2==”sept”) print $0}' data.f:一邊為真則輸出

6、變數定義:

awk ‘{date=$2;price=$5; if(date ~/[Ss]ept/) print “price is ” price}' data.f:變數定義,滿足date是sept或者Sept的將price輸出。

7、修改數值(源檔案數值不變)

複製代碼 代碼如下:

awk ‘{BASELINE=42; if($1>BASELINE) $5=$5+100; print $0}' data.f:三行程式,以“;”分割

如果修改的是文本域,就要添加“”””。例如:awk ‘{if($2==”may”) $2=”tt”; print $0}' data.f

上邊都是顯示所有資料,awk ‘{if($2==”may”) {$2=”tt”; print $0}}' data.f這個只顯示修改資料,仔細看看,其實文法和c一樣,只是最外邊添加了一個{}符號。

8、建立新域:(源檔案數值不變)

複製代碼 代碼如下:

awk ‘{if($5>$1){$8=$5-$1;print $1,$8}}' data.f:

或者awk ‘{if($5>$1){diff=$5-$1;print $1,diff}}' data.f

9、資料統計:

awk ‘{(total+=$5)}END{print total}' data.f:“{(total+=$5)}”和“{print total}”代表兩個不同的程式碼片段,如果沒有END每次的累積結果都會輸出,END可以理解為程式碼片段落的標誌,這樣只輸出最終結果即{print total}只執行一次。

10、統計檔案大小:

複製代碼 代碼如下:

ls –l | awk ‘{if(/^[^d]/) total=+$5}END{print “total KB:” total}':/^[^d]/行首匹配可以不寫域值$1

11、Awk內建變數:

ARGC 命令列參數個數

ARGV 命令列參數排列

ENVIRON 支援隊列中系統內容變數的使用

FILENAME awk瀏覽的檔案名稱

FNR 瀏覽檔案的記錄數

FS 設定輸入欄位分隔字元,等價於命令列- F選項

NF 瀏覽記錄的域個數

NR 已讀的記錄數

OFS 輸出域分隔字元

ORS 輸出記錄分隔字元

RS 控制記錄分隔字元

12、awk內建字串處理函數

gsub ( r, s )在整個$0中用s替代r

gsub ( r, s , t )在整個t中用s替代r

index ( s , t )返回s中字串t的第一位置

length ( s )返回s長度

match ( s , r )測試s是否包含匹配r的字串,返回位置

split ( s , a , fs )在fs上將s分成序列a

sprint ( f m t , exp )返回經f m t格式化後的exp

sub ( r, s ,$0) $0中s替換第一次r出現的位置

substr ( s , p )返回字串s中從p開始的尾碼部分

substr ( s , p , n )返回字串s中從p開始長度為n的尾碼部分

13、awk ‘gsub(/6\./,78) {print $0}' data.f:將所有“6.”換成78,並輸出

複製代碼 代碼如下:

awk ‘{if($2==”Sept”) {sub(/3/,”9″,$0); print $0}}' data.f:只替換第一個出現的

awk ‘BEGIN{print index(“hello”,”lo”)}':輸出的值為4

awk ‘{if($3==”3BC1997″) print length($3) ” ” $3}' data.f

awk ‘BEGIN{print match(“ABCD”,”B”)}':輸出2

awk ‘BEGIN{print match(“ABCD”,/B/)}':“//”和“”””效果一樣

awk ‘BEGIN {print split(“123#234#654″, myarray, “#”)}':返回數組元素個數,123#234#654是字串,以“#”為分隔字元,將字串放入數組。

awk ‘{if($1==34) print substr($3,2,7)}' data.f

awk ‘BEGIN{print substr(“helloleeboy”,2,7)}':輸出ellole

awk ‘BEGIN{print substr(“helloleeboy”,2,7)}' data.f:輸出n遍ellole,n為data.f的行數

14、awk ‘BEGIN{print”May\tDay\n\nMay \104\141\171″}':\104\141\171表示Day。\t:tab鍵,\n:換行,\ddd:八進位

15、echo “65” | awk ‘{printf “%c\n”,$0}':printf函數,和c差不多,輸出為A。(ASCII碼)

複製代碼 代碼如下:

echo “65” | awk ‘{printf “%d\n”,$0}':輸出65數字。

awk ‘{printf “%-15s %s\n”,$2,$3}' data.f:“%-15s”靠左對齊15個字元長度

awk ‘{if(age<$1) print $0}' age=80 data.f和 awk ‘{age=49;if(age<$1) print $0}' data.f結果一樣,前者將值傳入awk,後者在awk中定義了一個變數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.