shell脚本编辑6:awk过滤

awk数据过滤,统计(行,列):
逐行处理器

awk内植变量
$1,$2,$3..... 第n列
NF 当前行有多少列
NR 当前行号
awk打印常量(“常量必须要使用引号”打印多个以逗号隔开)

格式:
Awk 选项 ‘BEGIN{} 条件{} END{}‘ 文件

原则所有的指令必须放在 {}中

BEGIN{} 指令在读取内容前执行1次

条件{} 指令在读取文件中执行n次

END{} 指令在读取文件后执行1次

简式(3个指令必须有一个)
1:awk 选项 ‘条件{指令}’ 文件
2:命令 | awk 选项 ‘条件{指令}’
默认指令为打印
默认条件匹配所有
print打印 ($1<打印第一列>$2........)

选项:
-F 指定分割符<默认是空格或tab键>

条件:
1:/正则/ (模糊匹配)
2:数字和字符的比较 (精确匹配)
3:支持逻辑&&且 ||或
4:运算(当计算器运算)(加减乘除不定义数值默认为0)

5:支持分支结构循环结构
(if指令)
if (){}
if (){}else{}
if(){}else if (){}..

例:/etc/passwd下有多少普通用户有多少系统用户进行统计
awk -F: '{if ($3>=1000){x++}else{y++}} END{print " 普通用户:"x, "系统用户:"y}' /etc/passwd

while(){}循环:
词频
root hehe root
xixi root
ni hao ma root
awk '{i=1;while(i<=NF){if($i=="root"){x++};i++}} END{print x}' /a.txt

for (){}

tailf /var/log/httpd/access_log
ab -c 100 -n 10000 http://192.168.4.207/ (模拟100人访问该IP10000次)

统计:
awk '{ip[$1]++} END{for (i in ip){print i,ip[i]}}' /var/log/httpd/access_log

awk '{ip[$1]++} END{}' /access_log

a=(11 22 33 44 55 66 77 88 99 00)
a[‘abc’]=11
a[‘tt’]=22
a[‘hh’]=33
...... (shuchu abc=11)
awk ‘$1~/root/{ }’ ...对第一列作模糊匹配查找

例:awk -F: ‘{print $1}’ /etc/passwd
awd ‘{print “nh” ,”nm”}’ /etc/passwd
awk '/^K/{print "nh", "nm"}' /data.txt/data.txt
awk -F: '{print "用户是:",$1}' /etc/passwd

awk 'BEGIN{print "nihao"}' /data.txt/data.txt
awk '{print "nihao"}' /data.txt/data.txt
awk 'END{print "nihao"}' /data.txt/data.txt

awk -F: 'BEGIN{print "用户名 UID 解释器"} $1~/^root/{print$1,"\t"$4,"\t"$7 } END{print"总用户量:"NR}' / etc/passwd

Awk -F: ‘$1~/root/{print $3}’ /etc/passwd

awk 'BEGIN{x=3;y=4;print x+y}'

转载于:https://blog.51cto.com/13404755/2050757

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值