shell中awk编辑器
目录
- 一、awk工作原理
- 命令格式
- awk常见的内建变量(可直接用)
- 二、按行输出文本
- 三、按字段输出文本
- 四、通过管道、双引号调用shall命令
- 五、使用awk统计httpd访问日志中每个客户端IP的出现次数
- 六、cpu负载
- CPU使用情况
一、awk工作原理
1、逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
2、sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
3、在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“| |”表示“或”、“!“表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
命令格式
awk 选项 '模式或条件 {操作}'文件1 文件2 ...
awk -f 脚本文件 文件1 文件2 ...
awk常见的内建变量(可直接用)
FS: 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同NF: 当前处理的行的字段个数NR: 当前处理的行的行号(序数)$0: 当前处理的行的整行内容$n: 当前处理行的第n个字段(第n列)FILENAME: 被处理的文件名RS: 行分隔符。awk从文件.上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk-次仅读入一条记录,以进行处理。预设值是’\n’
二、按行输出文本
awk '{print}' testfile2 #输出所有内容
awk '{print $0}' testfile2 #输出所有内容awk 'NR==1,NR==3{print}' testfile2 #输出第1~3行内容
awk '(NR>=1)&& (NR<=3){print}' testfile2 #输出第1~3 行内容awk 'NR==1||NR==3{print}' testfile2 #输出第1行、第3行内容awk '(NR号2)==1{print}' testfile2 #输出所有奇数行的内容
awk '(NR号2)==0{print}'testfile2 #输出所有偶数行的内容awk '/^root/{print}' /etc/passwd #输出以root开头的行
awk '/nologin$/{print}' /etc/passwd #输出以nologin 结尾的行awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END{print x}'/etc/passwd #统计以/bin/bash结尾的行数,等同于grep -c "/bin/bash$" /etc/passwd
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作; awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中, 往往会放入打印结果等语句
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END{print x}'/etc/passwd #统计以/bin/bash结尾的行数
等同于
grep -c "/bin/bash$" /etc/passwd
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作; awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中, 往往会放入打印结果等语句
三、按字段输出文本
awk -F ":" '{print $3}' /etc/passwd #输出每行中(以空格或制表位分隔)的第3个字段awk -F ":" '{print $1,$3}' /etc/passwd #输出每行中的第1、3个字段awk -F ":" '$3<5{print $1,$3}' /etc/passwd #输出第3个字段的值小于5的第1、3个字段内容awk -F ":" '!($3<200){print}' /etc/passwd #输出第3个字段的值不小于200的行awk 'BEGIN {FS=":"}; {if($3>=1000){print}}' /etc/passwd #先处理完BEGIN的内容, 再打印文本里面的内容awk -F ":" '{max=($3>=$4)?$3:$4;{print max}' /etc/passwd # ($3>$4)?$3:$4三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给maxawk -F ":" '{print NR,$0}' /etc/passwd #输出每行内容和行号,每处理完一条记录,NR值加1awk -F ":" '$7~"/bash"{print $1}' /etc/passwd #输出以冒号分隔且第7个字段中包含/bash的行的第1个字段awk -F ":" '($1~"root")&&(NF==7){print $1, $2}' /etc/passwd #输出第1个字段中包含root且有7个字段的行的第1、2个字段awk -F ":” '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
#输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行
awk -F ":" '{max=($3>=$4)?$3:$4;{print max}' /etc/passwd
($3>$4)?$3:$4三元运算符,如果第3个字段的值大于等于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max
四、通过管道、双引号调用shall命令
echo $PATH | awk 'BEGIN{RS=":"};END{print NR}' #统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句awk -F: '/bash$/{print | "wC -1"}' /etc/passwd #调用wc -1命令统计使用bash 的用户个数,等同于grep -c "bash$" /etc/passwdfree -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}' #查看当前 内存使用百分比top -b -n 1| grep Cpu | awk -F ',' '{print$4}'| awk '{print$1}' #查看当前CPU空闲率,(-b-n 1 表示只需要1次的输出结果)date -d "$ (awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H: %M: %S" #显示上次系统重启时间,等同于upt ime; second ago为显示多少秒前的时间,+"%F %H: %M:%S"等同于+"*Y-%m-%d %H:%M:%S"的时间格式awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}' #调用w命令,并用来统计在线用户数awk 'BEGIN {"hostname" | getline ; {print $0}}' #调用hostname, 并输出当前的主机名
CPU使用率cpu_us=`top -b -n 1 | grep Cpu | awk '{print $2}'`
cpu_sy=`top -b -n 1 | grep Cpu | awk -F ',' '{print $2}' | awk '{print $1}'`
cpu_sum=$(($cpu_us+$cpu_sy))
echo $cpu_sum
当getline左右无重定向符“<”或“1”时,awk首先读取到了第一行,就是1,然后getline, 就得到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF, NR, FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一 行,而不是隔行seq 10 | awk '{getline; print $0}'
seq 10 | awk '{print $0; getline}'
seq 用于生成从一个数到另一个数之间的所有整数
echo "A B C D" | awk '{OFS="|";print $0;$1=$1;print $0}'
ABCD
AIBICID
$1=$1是用来激活$0的重新赋值,也就是说字段$1...和字段数NF的改变会促使awk重新计算$0的值,通常是在改变OFS后而需要输出$0时这样做
五、使用awk统计httpd访问日志中每个客户端IP的出现次数
awk '{ip[$1]++}END{for(i in ip) {print ip[i],i}}' /var/log/httpd/access_log | sort -r备注:定义数组,数组名称为ip,数字的下标为日志文件的第1列(也就是客户端的IP地址),++的目的在于对客户端进行统计计数,客户端.
IP出现一次计数器就加1。END中的指令在读取完文件后执行,通过循环将所有统计信息输出,for 循环遍历的是数组名ip的下标
六、cpu负载
cpu负载,内存容量,硬盘空间,网卡流量,安装的软件包数量,账户数量,当前登录的账户数量,进程数量,输错密码的主机
uptime, free -m,df -h, ifconfig ens33, rpm -qa|wc -l, /etc/passwd, who,ps aux, /var/log/secure过滤密码失败的命令
awk 'BEGIN {ip[$11]=0}; /Failed password/ {ip[$11]++};END {for(i in ip){print i,ip[i]}}' /var/log/secure
#!/bin/bash
#cpu负载,内存容量,磁盘空间,网卡流量,安装的软件包数量,账户数量,当前登录的账户数量,进程数量,输错密码的主机
#uptime, free -m,df -h, ifconfig ens33, rpm -qa|wc -l, /etc/passwd, who,ps aux, /var/log/secureip=`ifconfig ens33 | awk '/inet /{print $2}'`
echo "本地IP地址是:" $ip cpu=`uptime | awk '{print $NF}'`
#awk中NF为当前行的列数,$NF是最后一列echo "本机CPU最近15分钟的负载是:" $cpu
net_in=`ifconfig ens33 | awk '/RX p/{print $5}'`
echo "入站网卡流量为:"$net_innet_out=`ifconfig ens33 | awk '/TX p/{print $5}'`
echo "出站网卡流量为:"$net_out
mem=`free -m | awk ' /^Mem/{print $4)'`
echo "内存剩余容量为: " $memdisk=`df -h | awk '/sda1/ {print $4}'`
echo "根分区剩余容量为:" $diskuser=`cat /etc/passwd | wc -l`
echo "本地账户数量为:" $userlogin=`who | wc -l`
echo "当前登陆计算机的账户数量为:" $login
process=`ps aux | wc -l`
echo "当前计算机启动的进程数量为:" $process
soft=`rpm -qa | wc -l`
echo "当前计算机已安装的软件数量为:" $soft
CPU使用情况
#!/bin/bashus=`top -b -n 1 | grep Cpu | awk '{print $2}'`
echo "用户占用率为:" $us
sy=`top -b -n 1 | grep Cpu | awk -F "," '{print $2}' | awk '{print $1}'`
echo "内核占用率为:" $sy
id=`top -b -n 1 | grep Cpu | awk -F ',' '{print $4}'| awk '{print $1}'`
echo "cpu空闲率为:" $id
shell中awk编辑器相关推荐
- shell中awk,find,grep学习
在shell中运用awk,grep,find更多的时候是在对于文本进行操作.其中grep以及find相对好理解,grep结合固定的语法实现对文件中关键词的查找,其应用对象是文本: grep " ...
- linux awk 某一列合并,利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行...
一.问题描述 最近需要利用Shell将多行多列文本中某一列,通过指定的分隔符合并成一行.假设需要处理的文本如下: 我们主要处理的是,将用户名提取处理,合并成一行,并通过逗号进行分隔.最终的格式如下: ...
- linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序
待处理的数据格式如下: 为了便于统计分析,对数据进行如下处理: 当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序. 思路:先使用awk对数据进行合并,然后使用sort对数据进行排序.aw ...
- linux awk 脚本格式,偷偷学习shell脚本之awk编辑器
目录 awk编辑器 一.工作原理 二.命令格式 三.使用awk编辑器(示例) 1.按行输出文本 2.按字段输出文本 3.通过管道.双引号调用 Shell 命令 awk编辑器 一.工作原理 sed命令常 ...
- shell中的流编辑器awk
shell中的流编辑器awk 文章目录 shell中的流编辑器awk awk命令 awk工作原理 awk的命令格式 awk常见的内建变量(可直接使用) awk按行输出文本 awk以字段输出文本 awk ...
- shell中色彩处理和三剑客之awk使用技巧
Shell中的色彩处理 shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式1: echo -e "\033[背景颜色;文字颜色m 要输出的字符 \033[ ...
- shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join
Shell中的awk命令是非常强大的,有很多书籍专门介绍awk的.本文介绍的只是其中很小的一个点,使用awk命令完成两个文件的关联join. 先看看awk中的两个自身变量,NR和FNR. awk可以指 ...
- 在linux系统中 通过使用shell,linux系统中的shell和vi编辑器应用详细介绍
shell和vi编辑器 一.Shell 1.什么时shell Shell就是用户与操作系统内核之间的接口,起着协调用户和系统的一致性和用户在系统之间的交互作用.具体如下图: 2.shell的功能 Sh ...
- Unix/Linux 中shell命令 awk
shell命令awk使用例: 通过脚本打印出系统当前内存使用的百分比: #!/bin/bash [centos@centos shell]$ free -mtotal used free shared ...
最新文章
- Coursera课程Python for everyone:Quiz: Many-to-Many Relationships and Python
- ucos-ii在ARM7上移植
- 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_idea 快捷键汇总(转)...
- 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
- python 网页编程_通过Python编程检索网页
- 在LINUX系统中安装KVM虚拟化
- tensorflow保存数据为.pb格式和加载.pb文件(转)
- [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
- mybatis单元测试(无需启动容器)
- 如何查找native方法
- ​​spss13.0 附安装教程
- 50Ω阻抗问题详解及射频电路设计中的阻抗匹配
- 关于fat32分区32g限制的问题
- csv文件的格式---Comma Separate Values
- 21.运行Consent Page
- HDU 5956 The Elder (树形DP + 斜率优化)
- 资源文件冲突error RC2151 : cannot reuse string constants, 61446(0xF006)
- android 随机翻滚字幕,自定义跑马灯字幕滚动
- python 变量大小,进程和内存信息
- C++课程设计--小学生数学练习系统
热门文章
- (带手机版数据同步)蓝色大气隔声装饰工程公司类网站源码 营销型工程装饰网站织梦模板
- 【CF 应用开发大赛】瑞文代码推土机
- 泛化NeRF系列:IBRNet 学习基于多视点图像的绘制
- Debug/XXX.pch' is not a precompiled header file created with this compiler
- 《伟大的博弈》书中的精髓:华尔街是如何从一条小街,一步步发展为世界金融中心的。
- vivo 2020届校招在线编程笔试
- 转载自豆瓣,前端工程师成长路线
- phalapi框架实现腾讯云直播混流
- 通过abp官方自助创建的项目排坑记录
- 95社区 对接第三方社区 开源