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。