gawk 变量

    内建变量

        FS: 默认为空白字符

        OFS: 默认为空白字符

            示例:awk -v FS=':' -v OFS=':' '{print $1,$3,$7}' /etc/passwd  指明输入输出的分隔符

        RS:指明输入时的换行符

        ORS: 指明输出时的换行符

             示例:awk -v RS='\n' -v ORS="#" '{print}' /etc/passwd

        NF:  awk '{print NF}' /etc/fstab  显示每行的字段数量

                awk '{print $NF}' /etc/fstab 显示每行的最后一个字段

        NR: 显示行数

                awk '{print NR}' /etc/fstab /etc/issue  显示行号

                awk '{print NR}' /etc/fstab /etc/issue 统一标示行号

        FNR:各文件分别计数

                awk '{print FNR}' /etc/fstab /etc/issue

        FILENAME: 当前正在处理的文件名

        ARGC: 命令行参数的个数

        ARGV: 数组,保存的是命令行所给定的各参数

        示例:

    [root@localhost ~]# awk 'BEGIN{print ARGV[1]}' /etc/fstab /etc/issue
    /etc/fstab
    [root@localhost ~]# awk 'BEGIN{print ARGV[2]}' /etc/fstab /etc/issue  
    /etc/issue

       自定义变量:

            -v var=value 变量名区分字符大小写

            在program中直接定义    

    [root@localhost ~]# awk 'BEGIN{test="hello gawk"; print test}'    
        hello gawk

    函数

        内置函数

                数值处理:rand() 返回0和1之间的随机数

                    awk 'BEGIN{print rand()}'

                字符串处理:

                    length([s]): 返回指定字符串的长度

                    sub(r,s,[t]): 以r表示的模式来查找t所表示的字符串的匹配的内容,并将其第一次出现替换为s所表示的内容

                    gsub(r,s,[t]): 以r表示的模式来查找t所表示的字符串中的匹配的内容,并将其所有出现均替换为s所表示的内容

                    split(s, a[,r]) 以r为分割字符s,并将切割后的结果保存至a所表示的数组中             

[root@localhost ~]# netstat -tan | awk '/^tcp\>/{split($5,ip,":"); print ip[1]}'
0.0.0.0
0.0.0.0
0.0.0.0
0.0.0.0
192.168.99.1
netstat -tan | awk '/^tcp\>/{split($5,ip,":"); count[ip[1]]++}END{for (i in count){print i, count[i]}}'
192.168.99.1 1
0.0.0.0 4
[root@localhost ~]# cat file.txt 
hello world zhang san li si zhang si wang wu zhao liu
hello,alon hello nimei

统计文档中每个单词出现的次数,并按降序的方式排列

[root@localhost ~]# egrep -o "\<[[:alnum:]]+\>" file.txt | awk '{w[$0]+=1}END{for(a in w) print a"\t"w[a]}' | sort -k2 -r    
hello   3
zhang   2
si      2
zhao    1
wu      1
world   1
wang    1
san     1
nimei   1
liu     1
li      1
alon    1

统计文档中每个字符出现的次数,并按升序的方式排列

[root@localhost ~]# egrep -o "[[:alnum:]]{1}" file.txt | awk '{c[$0]+=1}END{for (a in c) print a "\t" c[a]}' | sort -k2 -n     
d       1
m       1
r       1
u       2
g       3
s       3
w       3
z       3
e       4
a       6
h       6
i       6
n       6
o       6
l       10