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
转载于:https://blog.51cto.com/runingday/1868249