国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【awk】awk語法(小結)

【awk】awk語法(小結)

Shell編程 2010-05-25 11:04:45 閱讀644 評論0 字號:

導讀:bkeep

第一篇:基礎篇 

1,awk基本語法 

2,比較操作符

3,復合表達式

4next命令:

5,awk中的數字操作符:

6,awk中的賦值操作符

7,BEGIN    END

8,內置變量 

9,awk使用shell變量

10,awk中的三種流控制語句

10.1 if語句

10.2 while語句:

10.3 for語句:

11. $0

12,shell里的特殊變量

第二篇:準高級篇

1,內置函數

2 輸入輸出的內部函數

3,借用C語言的格式化輸出指令,

4,printf %。。。”中的。。。有以下格式

5,gawk中的特殊字符:

6, 改變字段分隔符

7, 元字符

8 調用gawk程序

9, 數組

10, 用戶自定義函數

 

正文:

 

第一篇:基礎篇

1awk基本語法

awk ‘script’  files

script 由下面的結構組成 /pattern/{actions}

2,比較操作符

語法:expression {actions;}

expression 可以使用以下操作符構成

<                                 小于

>                                 大于

<=                               小于等于

>=                               大于等于

==                               等于

!=                               不等于

value ~ /pattern/          value匹配pattern則為真

value !~ /pattern/         value不匹配pattern則為真

說明:$2 ~ /^\$[1-9][0-9]*  將匹配第二列以$開頭,然后大于1的二位數。(注意,這里是1而不是10

3,復合表達式

語法:(compound expression

expr1&& (expr2)  -------

expr1|| (expr2)  -------

說明一下:符合表達式必須用括號括起來

當使用&&時,expr1expr2必須同時為零(零代表真!呵呵~),復合表達式才為真;

當使用 || 時,expr1expr2 只要有一個為真,復合表達式則為真!

4,next命令:

告訴awk跳過剩下的所有模式和表達式,并讀取輸入的下一行,同時從第一個模式或表達式開始處理該行!

5,awk中的數字操作符:

+           

-            

*           

/            

%           求余

^            求冪

6,awk中的賦值操作符

+=                 x+=1 就是x=x+1

-=                  x-=1 就是x=x-1

*=                 x*=1 就是x=x*1

/=                  x/=1 就是x=x/1

%=                x%=2 就是x=x%2

^=                 x^=2 就是x=x^2

7BEGIN    END

awk的語法:/pattern/ {action}    pattern:模式

這里pattern有兩個特殊模式BEGINEND

下面是BEGIN  END的語法:

awk ‘

BEGIN { actions }

/ pattern / { actions }

/ pattern / { actions }

END { actions }

  files

 

BEGINEND都是可選的

·當指定BEGIN模式時,awk在讀取任何輸入前執(zhí)行動作 actions

·當指定END模式時,awk在其退出前執(zhí)行動作actions

 

這里要特別注意:比如awk讀入aa.txt。那么BEGIN只在讀入aa時執(zhí)行一次,然后按行處理的時候不再執(zhí)行BEGIN指定的action?。ㄒ部梢赃@么理解:BEGIN只對文件生效,而不是按行生效?。。?;理解了BEGINEND還會糊涂嗎?呵呵!

 

8,內置變量

gawk語言中有幾個十分有用的內置變量,現在列于下面:

NR 已經讀取過的記錄數。

FNR 從當前文件中讀出的記錄數。

FILENAME 輸入文件的名字。

FS 字段分隔符(缺省為空格)。

RS 記錄分隔符(缺省為換行)。

OFMT 數字的輸出格式(缺省為% g)。

OFS 輸出字段分隔符。

ORS 輸出記錄分隔符。

NF 當前記錄中的字段數。

如果你只處理一個文件,則NR FNR 的值是一樣的。但如果是多個文件, NR是對所有的文件來說的,而FNR 則只是針對當前文件而言。

改變內置變量的方法?

# awk 'BEGIN {FS=":"} {print $1 |"sort"}' /etc/passwd

adm

apache

avahi

此程序會將所有用戶的登錄名稱,依照字母的順序顯示出來。

 

9,awk使用shell變量

經過前面的學習,我們知道shell變量的引用由$xxx 實現,而awk中的變量直接使用xxx來引用。所以我們就要思考如何讓awk使用shell變量

語法:

awk  ‘script’  awkvar1=value  awkvar2=value ......  files

說明: awk 命令; script’:awk將要執(zhí)行的腳本; awkvarNawk的變量;valueshell中的變量值; files:將要處理的文件名

10,awk中的三種流控制語句

if語句

while語句

for語句

10.1 if語句

if (expression1) {action1}

else if (expression2) {action2}

else { action3}

執(zhí)行過程:

1)計算expression1的值

2)若expression1為真,執(zhí)行action1并推出if語句

3)若expression1為假,計算expression2

4)若expression2為真,執(zhí)行action2并退出if語句

5)若expression2為假,執(zhí)行action3并退出if

 

10.2 while語句:

while (expression) { actions }

expression為真,則執(zhí)行actions

[root@master bkeep]# awk 'BEGIN { x=0;while(x<3) {x+=1;print x;}}'   //先給x+1再輸出

 

10.3 for語句:

for initialize_counter; test_counter;increment_counter {

     action

}

解釋一下,呵呵

for (初始化計數器變量;測試計數器是否到頂了;增加計數器的值)  {

   要執(zhí)行的動作!

}

 

【常用】

循環(huán)迭代處理記錄中的域并輸出他們

[root@master bkeep]# cat for2.sh

#!/bin/bash

awk '{

    for (x=1;x<=NF;x+=1) {

      printf "%s    ",$x "zbb";

    }

    printf "\n";

}' fruit_prices.txt

11. $0

awk使用變量0原原本本地存儲它所讀入的整個輸入行。這樣可以保持和原來文本格式相同的輸出

12shell里的特殊變量

# sh /usr/local/bkeep/shell.sh 001 002

I'm $0 is:/usr/local/bkeep/shell.sh         //正在被執(zhí)行腳本的名字;`basename $0`

I'm $1 is:001                 //$1接收到的參數

I'm $2 is:002                 //$2接收到的參數

I'm $# is:2                    //總共接收到的參數個數

I'm $* is:001 002          //把接收到的參數全部打印出來

I'm $@ is:001 002         //同上

I'm $? is:0                    //上一個腳本的退出狀態(tài)“0代表正常;“1非正常退出

I'm $$ is:24137             //當前執(zhí)行腳本的進程ID

I'm $! is:                      //前一個后臺進程的id

 

第二篇:準高級篇

1,內置函數

length(string) 求出string 有幾個字符。

match ( string,regexp ) 在字符串string 中尋找符合regexp 的最長、最靠左邊的子字

符串。返回值是regexp string 的開始位置,即index值。match 函數將會設置系統(tǒng)變量

RSTART 等于index的值,系統(tǒng)變量RLENGTH 等于符合的字符個數。如果不符合,則會

設置R S TA RT 0RLENGTH - 1。

sprintf ( formatexpression1,. . . ) printf 類似,但是sprintf 并不顯示,而是返回字

sub ( regexpreplacement,target ) 在字符串target 中尋找符合regexp 的最長、最靠左的地方,以字串replacement 代替最左邊的regexp。

·gsub(regexp,replacement,target)與前面的sub類似。在字符串target中尋找符合regexp的所有地方,以字符串replacement代替所有的regexp。例如:

substr(string,startlength)返回字符串string的子字符串,這個子字符串的長度為

length,從第start個位置開始。

tolower(string) 將字符串string的大寫字母改為小寫字母。

toupper(string) 將字符串s t r i n g的小寫字母改為大寫字母。

 

2 輸入輸出的內部函數

close(filename) 將輸入或輸出的文件filename 關閉。

system(command) 此函數允許用戶執(zhí)行操作系統(tǒng)的指令,執(zhí)行完畢后將回到gawk

 

3,借用C語言的格式化輸出指令,

可以讓gawk的輸出形式更為多樣。這時,應該用printf而不是print。例如:

# gawk '$1 != "Tim" {printf "%5s likes this language\n",$2}' testfile

   10 likes this language

   90 likes this language

  110 likes this language

%5是定義$2列的輸出占5個字符的位置

\n 是換行符

printfC語言的格式化輸出

4,printf “%。。。中的。。。有以下格式

d 顯示十進制的整數。

i 顯示十進制的整數。

e 將浮點數以科學記數法的形式顯示。

f 將數字以浮點的形式顯示。

g 將數字以科學記數法的形式或浮點的形式顯示。數字的絕對值如果大于等于0.0001

o 顯示無符號的八進制整數。

s 顯示一個字符串。

x 顯示無符號的十六進制整數。1 01 5af表示。

X 顯示無符號的十六進制整數。1 01 5AF表示。

% 它并不是真正的格式控制字符,% %將顯示%

5,gawk中的特殊字符:

你也可以使用一些換碼控制符格式化整行的輸出。之所以叫做換碼控制符,是因為gawk對這些符號有特殊的解釋。下面列出常用的換碼控制符:

a 警告或響鈴字符

b 后退一格

f 換頁

n 換行

r 回車

t Ta b

v 垂直的t a b

驗證一下\a,運行后“當”了一聲,呵呵,有意思!

# gawk '{printf "%5s works for %10s and earns %6f an hour\n\a",$1,$2,$5 }' testfile

6, 改變字段分隔符

# awk -F "," '{print $1,$2,$3}' aa

7, 元字符

^ 表示字段的開始。

$ 表示字段的結束。

. 表示和任何單字符m匹配。

| 表示“或”。

* 表示字符的零到多次重復。

+ 表示字符的一次到多次重復。

{a,b} 表示字符a次到b次之間的重復。  //沒有成功!

表示字符零次和一次的重復。

[] 表示字符的范圍。

[^] 表示不在[ ]中的字符。

8, 調用gawk程序

# gawk  –f  script  filename

# gawk  –f script  -F";"  filename

# gawk -f script filename1 filename2 filename3 ...

9 數組

gawk語言支持數組結構。數組不必事先初始化。聲明一個數組的方法如下:

arrayname[num]=value請看下面的例子:

# cat reverse.sh

#!/bin/bash

{line[NR] = $0 } # remember each line

END {var=NR # output lines in reverse order

while (var > 0){

print line[var]

var--

}

}

10 用戶自定義函數

下面詳細解釋一下自定義的function函數

# cat function.sh

#!/bin/bash

{print "sum=",SquareSum($1,$2)} //這行是awk最終執(zhí)行的動作(調用我們自定義的函數)

                                                 //這里把欄位1和欄位2的值分別賦予x,y變量

function SquareSum(x,y){    //function是關鍵字,SquareSum是自定義函數名,

//x,y是自定義函數的參數列表

sum=x*y+y*y        //函數真正的功能:先相乘再相加,最后返回sum值!

return sum

}

# cat testfile

1  10  11  12  1.1111

9  90  91  92  9.99999

11 110 111 112  111.1111

Tim  zhengbin bkeep tom

# cat function.sh

#!/bin/bash

{print "sum=",SquareSum($1,$2)}

function SquareSum(x,y){

sum=x*y+y*y

return sum

}

# awk -f function.sh testfile

sum= 110

sum= 8910

sum= 13310

sum= 0

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
gawk實用程序
[轉帖]Linux\awk 簡明教程
linux命令終極系列(awk
Unix awk使用手冊
linux 文本編輯命令grep sed awk(轉) - linux開發(fā) - gliet...
AWK使用
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服