awk命令

awk和sed都可以处理文本

awk侧重于复杂逻辑处理

sed侧重于正则处理

awk和sed可以共同使用

练习文件地址

passwd :etc目录下

access.log :/usr/local/nginx/logs

 

awk '{print $1}' file 打印第一列内容 默认空格分割

awk -F ':' '{print $1}' file 打印第一列内容 -F设置分隔符参数,设置:分割

 

 

awk -F ':' '{print"username:"$1" "$2}' passwd 可以用字符串拼接打印,但是字符串需要用“”引起来。

 

内置函数

NR:行号

NF:字段数量

FILENAME:正在处理的文件名

awk -F ':' '{print NR" "NF" " FILENAME}' passwd

awk -F ':' '{printf("line:%s" " col:%s" "user:%s",NR,NF,$1)}' passwd 加多一个

 

 

 

command扩展

awk -F ':' 'BEGIN{print"line col user"}{print NR,NF,$1}END{print "-------end--------"}' passwd

 

例子1:显示/etc/passwd中用户名ID大于100的行

awk -F ':' '{if($3>100) print $1}' passwd ‘逻辑表达式+操作命令 ’

awk -F ':' '$3>100{print $1}' passwd ‘逻辑表达式+操作命令 ’

 

例子2:在服务器的日志中找出IP:192.168.174.129的访问日期

awk '/192.168.174.129/{print $4}' access.log ‘正则表达式+操作命令 ’

 

awk '/192.168.174.129/{print substr($4,2)}' access.log

substr函数可以截取这段数的开头和结尾,以1开头,【是1,所以用2截取

 

 

例子3:显示/etc/passwd中以m开头用户名

awk -F ':' '$1~/^m.*/{print $1}' passwd

awk -F ':' '$1!~/^m.*/{print $1}' passwd 显示不以m开头的用户名

 

例子4:统计当前文件夹下的文件/文件夹占用的大小

ll|awk 'BEGIN{count=0}{count+=$5}END{print count}'

ll|awk 'BEGIN{count=0}{count+=$5}END{print count/1024/1024"MB"}' 因为ll默认统计出来的是b

 

例子5:统计显示/etc/passwd的账户总人数

awk -F ':' 'BENGIN{count=0}$1!~/^$/{count++}END{print count}' passwd

 

例子6:统计显示/etc/passwd中UID大于100的用户名

awk -F ':' '$3>100{print $1}' passwd

 

awk -F ':' 'BEGIN{count=0}$3>100{user[count++]=$1}END{for(i=0;i<count;i++)print i,user[i]}' passwd

 

 

例子7:统计access_log日志中每个IP出现的次数

awk '{arr[$1]++}END{for(key in arr)print key,arr[key]}' access.log

 

原文地址:https://www.cnblogs.com/xiaojing2017/p/8617570.html