目录

  • 一、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编辑器相关推荐

  1. shell中awk,find,grep学习

    在shell中运用awk,grep,find更多的时候是在对于文本进行操作.其中grep以及find相对好理解,grep结合固定的语法实现对文件中关键词的查找,其应用对象是文本: grep " ...

  2. linux awk 某一列合并,利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行...

    一.问题描述 最近需要利用Shell将多行多列文本中某一列,通过指定的分隔符合并成一行.假设需要处理的文本如下: 我们主要处理的是,将用户名提取处理,合并成一行,并通过逗号进行分隔.最终的格式如下: ...

  3. linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序

    待处理的数据格式如下: 为了便于统计分析,对数据进行如下处理: 当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序. 思路:先使用awk对数据进行合并,然后使用sort对数据进行排序.aw ...

  4. linux awk 脚本格式,偷偷学习shell脚本之awk编辑器

    目录 awk编辑器 一.工作原理 二.命令格式 三.使用awk编辑器(示例) 1.按行输出文本 2.按字段输出文本 3.通过管道.双引号调用 Shell 命令 awk编辑器 一.工作原理 sed命令常 ...

  5. shell中的流编辑器awk

    shell中的流编辑器awk 文章目录 shell中的流编辑器awk awk命令 awk工作原理 awk的命令格式 awk常见的内建变量(可直接使用) awk按行输出文本 awk以字段输出文本 awk ...

  6. shell中色彩处理和三剑客之awk使用技巧

    Shell中的色彩处理 shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式1: echo -e "\033[背景颜色;文字颜色m 要输出的字符 \033[ ...

  7. shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join

    Shell中的awk命令是非常强大的,有很多书籍专门介绍awk的.本文介绍的只是其中很小的一个点,使用awk命令完成两个文件的关联join. 先看看awk中的两个自身变量,NR和FNR. awk可以指 ...

  8. 在linux系统中 通过使用shell,linux系统中的shell和vi编辑器应用详细介绍

    shell和vi编辑器 一.Shell 1.什么时shell Shell就是用户与操作系统内核之间的接口,起着协调用户和系统的一致性和用户在系统之间的交互作用.具体如下图: 2.shell的功能 Sh ...

  9. Unix/Linux 中shell命令 awk

    shell命令awk使用例: 通过脚本打印出系统当前内存使用的百分比: #!/bin/bash [centos@centos shell]$ free -mtotal used free shared ...

最新文章

  1. Coursera课程Python for everyone:Quiz: Many-to-Many Relationships and Python
  2. ucos-ii在ARM7上移植
  3. 解决 IDEA 调用其他类的时候自动加上包路径和类名的情况_idea 快捷键汇总(转)...
  4. 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
  5. python 网页编程_通过Python编程检索网页
  6. 在LINUX系统中安装KVM虚拟化
  7. tensorflow保存数据为.pb格式和加载.pb文件(转)
  8. [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
  9. mybatis单元测试(无需启动容器)
  10. 如何查找native方法
  11. ​​spss13.0 附安装教程
  12. 50Ω阻抗问题详解及射频电路设计中的阻抗匹配
  13. 关于fat32分区32g限制的问题
  14. csv文件的格式---Comma Separate Values
  15. 21.运行Consent Page
  16. HDU 5956 The Elder (树形DP + 斜率优化)
  17. 资源文件冲突error RC2151 : cannot reuse string constants, 61446(0xF006)
  18. android 随机翻滚字幕,自定义跑马灯字幕滚动
  19. python 变量大小,进程和内存信息
  20. C++课程设计--小学生数学练习系统

热门文章

  1. (带手机版数据同步)蓝色大气隔声装饰工程公司类网站源码 营销型工程装饰网站织梦模板
  2. 【CF 应用开发大赛】瑞文代码推土机
  3. 泛化NeRF系列:IBRNet 学习基于多视点图像的绘制
  4. Debug/XXX.pch' is not a precompiled header file created with this compiler
  5. 《伟大的博弈》书中的精髓:华尔街是如何从一条小街,一步步发展为世界金融中心的。
  6. vivo 2020届校招在线编程笔试
  7. 转载自豆瓣,前端工程师成长路线
  8. phalapi框架实现腾讯云直播混流
  9. 通过abp官方自助创建的项目排坑记录
  10. 95社区 对接第三方社区 开源