awk相关实践和学习

https://www.cnblogs.com/myyan/p/4765683.html

************************************正则表达式*********************************

1.单字符的正则表达式

1)特定字符:

2)范围字符:单个字符[]

数字字符:[0-9],[259]

小写字符:[a-z]

大写字符:[A-Z]

符号字符:[,:]

范围内字符:反向字符^:[^0-9]

3)任意字符:一个“.”代表任意字符

注意: [.]和\.代表本身含义

2.正则表达式的其他字符

1)边界字符:头尾字符

头字符^:^root 注意与[^]区别

尾字符:$:false$

空行:^$

2)元字符:

\w:匹配任何字类字符包括下划线[A-Za-z0-9_]

\W:匹配任何非字类字符[^A-Za-z0-9_]

\b:代表单词的分割

*************************************awk******************************************

1.awe的命令格式

awk [optiong] 'command' file(s)

其中command的组成:pattern {awk的操作命令}

pattern可以是正则表达式或者逻辑判断

awk的操作命令的组成为:内置函数:print() printf()

控制指令:if(){}else{} while(){}

2.awk的内置函数

1)$0:表示整个当前行

$1:表示该行的第一个参数

2)awk 内置参数:分隔符

例子:awk -F ':' '{print $3}' /etc/password

awk -F ':' '{print $3 "\t " $1}' /etc/password

3)NR:每行的记录号

NF:每行字段数量的变量

FILENAME:正在处理的文件名

例子:awk -F ':' '{print NR NF}' /etc/password

3.实际应用

1)输出password文件中每行的行号,列好,以及用户名。分别用print和printf实现

awk -F ':' '{print "Line: "NR,"col: "NF,"User: "$1 }' /etc/password

awk -F ':' '{printf("Line:%s clo:%s User:%s",NR,NF,$1)}' /etc/password

2)输出uid大于100的行号列号

awk -F ':' '{if ($3>100) print "Line: "NR,"col: ":NF}' /etc/password

3)输出系统日志中为ERROR的日志的日期

awk '/Error/{print $}' /etc/log

4.逻辑判断

1)匹配正则:~,!~

2)判断逻辑:==,!=,<,>

实际应用:

输出password文件中第一个参数首字母为m开头的

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

5.awk的扩展模式

command2的扩展

BEGIN{print "start"}pattern{command}END{print "end"}

awk读取行的过程其实是一个循环文件行的过程。所以本质是一个循环。

BEGIN{print "start"}:在循环前,是一个初始化的过程

END{pring "end"}:在循环后。是一个读取后的过程

实际应用:

1)制表现实password文件的行号列号以及用户名

awk -F ':' 'BEGIN{print "Line clo User"}{print NR,NF,$3}END{print "------"FILENAME"-----------"}' /etc/password

2)统计当前文件夹下的文件、文件夹的大小

ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size=" size/1024/1024"M"}'

3) 统计现实password的账户总人数

awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print "count=" count}' passw

4)统计现实uid大于100的用户名

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

5)统计netstat -anp中LISTEN的CONNETCT的数量

netstat -anp| awk '$6~/CONNECTED|LISTEN/{sum[$6]++}END{for(i in sum) print i,sum[i]}'

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值