awk 詳解

AWK使用方法總結
Aawk是一種優秀的文本編輯工具,在系統管理工作中做大量使用。以下是對其做簡單總結.
AWK內置變量
屬性
說明
$0當前記錄(作爲單個變量)
$1~$n當前記錄的第n個字段,字段間由FS分隔
FS輸入字段分隔符 默認是空格
NF當前記錄中的字段個數,就是有多少列
NR已經讀出的記錄數,就是行號,從1開始
RS輸入的記錄他隔符默 認爲換行符
OFS輸出字段分隔符 默認也是空格
ARGC命令行參數個數
ARGV命令行參數數組
內置變量實例

1、常用操作

#awk '/^root/{print $0}' /etc/passwd 


root:x:0:0:root:/root:/bin/bash


/^root/ 爲選擇表達式,$0代表是逐行


2、設置字段分隔符號(FS使用方法)



#awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd


root /bin/bash


FS爲字段分隔符,可以自己設置,默認是空格,因爲passwd裏面是”:”分隔,所以需要修改默認分


隔符。NF是字段總數,$0代表當前行記錄,$1-$n是當前行,各個字段對應值。

3、記錄條數(NR,FNR使用方法)



#awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd


1 root /bin/bash

2 bin /sbin/nologin

3 daemon /sbin/nologin

4 adm /sbin/nologin

5 lp /sbin/nologin

6 sync /bin/sync

7 shutdown /sbin/shutdown

……


NR得到當前記錄所在行



4、設置輸出字段分隔符(OFS使用方法)


# awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd


1^^root^^/bin/bash

 


OFS設置默認字段分隔符


AWK變量傳值

1、獲得普通外部變量

#test='awk code'                            


#echo | awk  '{print test}' test="$test"


awk code


 


格式如:awk ‘{action}’  變量名=變量值   ,這樣傳入變量,可以在action中獲得值。 注意:變量名與值放到’{action}’後面。


2、BEGIN程序塊中變量


# test='awk code' 

#echo | awk -v test="$test" 'BEGIN{print test}'

awk code


#echo | awk -v test="$test" '{print test}'

awk code


格式如:awk –v 變量名=變量值 [–v 變量2=值2 …] 'BEGIN{action}’  注意:用-v 傳入變量可以在3中類型的action 中都可以獲得到,但順序在  action前面。


awk流程控制語句

在linux awk的 while、do-while和for語句中允許使用break,continue語句來控制流程走向,也允許使用exit這樣的語句來退出。break中斷當前正在執行的循環並跳到循環外執行下一條語句。if 是流程選擇用法。 awk中,流程控制語句,語法結構,與c語言類型。下面是各個語句用法。


一.條件判斷語句(if)



if(表達式) #if ( Variable in Array )

    語句1

else

    語句2


格式中"語句1"可以是多個語句,如果你爲了方便Unix awk判斷也方便你自已閱讀,你最好將多個語句用{}括起來。Unix awk分枝結構允許嵌套,其格式爲:


if(表達式)

{語句1}

else if(表達式)

{語句2}

else

{語句3}



# awk 'BEGIN{ 

test=100;

if(test>90)

{

    print "very good";

}

else if(test>60)

{

    print "good";

}

else

{

    print "no pass";

}

}'


very good


 


每條命令語句後面可以用“;”號結尾。



二.循環語句(while,for,do)



1.while語句


格式:


while(表達式)


{語句}




例子:


# awk 'BEGIN{ 

test=100;

total=0;

while(i<=test)

{

    total+=i;

    i++;

}

print total;

}'

5050



2.for 循環



for循環有兩種格式:


格式1:


for(變量 in 數組)


{語句}


例子:


# awk 'BEGIN{ 

for(k in ENVIRON)

{

    print k"="ENVIRON[k];

}

}'


AWKPATH=.:/usr/share/awk

OLDPWD=/home/web97

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

SELINUX_LEVEL_REQUESTED=

SELINUX_ROLE_REQUESTED=

LANG=zh_CN.GB2312


。。。。。。


說明:ENVIRON 是awk常量,是子典型數組。


格式2:


for(變量;條件;表達式)


{語句}


例子:


# awk 'BEGIN{ 

total=0;

for(i=0;i<=100;i++)

{

    total+=i;

}

print total;

}'


3.do循環



格式:


do


{語句}while(條件)


例子:


[chengmo@localhost nginx]# awk 'BEGIN{ 

total=0;

i=0;

do

{

    total+=i;

    i++;

}while(i<=100)

print total;

}'

505050



AWK的內置函數
一 算術函數
函數名
說明
atan2( y, x )返回 y/x 的反正切。
cos( x )返回 x 的餘弦;x 是弧度。
sin( x )返回 x 的正弦;x 是弧度。
exp( x )返回 x 冪函數。
log( x )返回 x 的自然對數。
sqrt( x )返回 x 平方根。
int( x )返回 x 的截斷至整數的值。
rand( )返回任意數字 n,其中 0 <= n < 1。

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