夜幕降临,一起探讨awk编辑器

  • 一、awk工作原理
  • 二、awk命令格式
  • 三、常见的内建变量
  • 四、按行输出文本
  • 五、按字段输出文本
  • 六、通过管道符号、双引号调用shell命令
  • 七、cpu使用率

一、awk工作原理

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”,然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过 print 的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、"||“表示"或”、"!“表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

二、awk命令格式

awk  选项   '模式或条件 {操作}'  文件1   文件2...
awk  -f   脚本文件   文件1    文件2...

三、常见的内建变量

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

四、按行输出文本

输出所有内容

awk  '{print)’  testfile1         #输出所有内容
awk '{print $0}’ testfile1        #输出所有内容

[root@gcc zhengze1]#awk '{print}' testfile1      #输出所有内容
one
two
three
four
five
six
seven
eight
nine
ten
eleven[root@gcc zhengze1]#awk '{print $0}' testfile1       #和上面命令一样,也是输出所有内容
one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve

输出指定行内容

awk 'NR==1, NR==3{print}'  testfile1       #输出第1-3行内容
awk  '(NR>=1) &&  (NR<=3)  {print}'  testfile1       #输出第1-3行内容awk  'NR==1 || NR==3 {print}'    testfile1       #输出第1行、第3行内容

[root@gcc zhengze1]#awk 'NR==1,NR==3{print}' testfile1     #输出第1-3行内容
one
two
three[root@gcc zhengze1]#awk '(NR>=1)&&(NR<=3){print}' testfile1       #输出第1-3行内容
one
two
three[root@gcc zhengze1]#awk 'NR==1||NR==3{print}' testfile1          #输出第1行、第3行内容
one
three

输出奇数行,偶数行内容

awk '(NR%2)==1{print}'  testfile1      #输出奇数行
awk '(NR%2)==0{print}'  testfile1       #输出偶数行

[root@gcc zhengze1]#awk '(NR%2)==1{print}'  testfile1      #输出奇数行内容
one
three
five
seven
nine
eleven
[root@gcc zhengze1]#awk '(NR%2)==0{print}'  testfile1      #输出偶数行内容
two
four
six
eight
ten
twelve

输出以…开头,以…结尾的行的内容

awk '/^root/{print}'  /etc/passwd        #输出以root开头的内容
awk '/nologin$/{print}'  /etc/passwd     #输出以nologin结尾的内容

[root@gcc zhengze1]#awk '/^root/{print}'  /etc/passwd
root:x:0:0:root:/root:/bin/bash[root@gcc zhengze1]#awk '/nologin$/{print}'  /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/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 -F ":" '{print $3}' /etc/passwd          #输出每行中(以”:“分割的)的第三个字段awk -F ":" '{print $1,$3}' /etc/passwd       #输出每行中(以”:“分割的)的第1,3个字段awk -F ":" '$3<5{print $1,$3}' /etc/passwd   #输出第三个字段的值小于5的行的第1,3个字段awk -F ":" '!($3<200){print}' /etc/passwd    #输出第三个字段的值不小于200的行的内容awk 'BEGIN {FS=":"};{if ($3>=200){print}}'  /etc/passwd   #先处理BEGIN里面的内容(将列分隔符改为:)再打印文本里的内容(如果第三段的的值大于等于200,就输出)awk -F ":" '{max=($3>$4)?$3:$4;{print max}}' /etc/passwd
#($3>$4)?$3:$4是三元运算符,如果第三个字段的值大于第四个字段的值,则把第三个字段的值赋给max,否则把第四个字段的值赋给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个字段(NF:当前处理的行的字段个数)awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd  #输出第7个字段不为/bin/bash,也不为/sbin/nologin的所有行

六、通过管道符号、双引号调用shell命令

echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'  #统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句awk -F ":" '/bash$/{print | "wc -l"}' /etc/passwd
#调用 wc -l 命令统计使用 bash 的用户的个数(即以bash结尾的行),等同于
grep -c "bash$"  /etc/passwdfree -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'     #查看当前内存使用百分比(int 指字符类型,这里代表整数型,即没有小数点)top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}'
#查看当前cpu空闲率,(-b -n 1表示只需要1次的输出结果)
整句命令意思是:动态输出一次进程的结果(top -b -n 1);过滤出Cpu那一行(grep Cpu);以逗号进行分隔,打印出第四列(awk -F ',' '{print $4}');接着打印出过滤出的第四列的第一个值(awk '{print $1}')date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S"
#显示上次系统重启的时间,等同于uptime: second ago为显示多少秒前的时间,+"%F %H:%M:%S"等同于+”%Y-%m-%d %H:%M:%S“的时间格式awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}'
#调用w命令,并用来统计在线用户数;w命令可以获取当前在线的用户的详细信息;getline是取行;打印n-2行是因为w显示的信息的前两行是没有用的,所以去掉前两行。[root@gcc zhengze1]#w15:41:01 up 19:50,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.200.1    11:19    5.00s  0.12s  0.01s wawk 'BEGIN {"hostname" | getline ; {print $0}}'     #调用hostname命令,输出当前的主机名当getline左右无重定向符“<"或"|"时, 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}'         #可以得出奇数行

七、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

夜幕降临,一起探讨awk编辑器相关推荐

  1. Linux awk编辑器及命令

    Linux awk编辑器及命令 一.awk编辑器 1.工作原理 2.命令格式 3.awk常见的内建变量如下所示: 二.按行输出文本 三.按字段输出文本 四.通过管道.双引号调用 Shell 命令 一. ...

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

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

  3. cocos creator2.2.2益智教育游戏《夜幕降临》源码H5+安卓+IOS三端源码

    cocos creator2.2.2益智教育游戏<夜幕降临>源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator2.X版本,完整的源 ...

  4. 故乡 | 登高望远,夜幕降临

    欢迎星标我的公众号若川视野,回复加群,长期交流学习 上周末看了几集豆瓣评分8.5分刘同同名小说的青春剧<我在未来等你>,让我回想起自己的高中生活. 也想起小时候经常爬到故乡附近的小山,看夕 ...

  5. shell中awk编辑器

    目录 一.awk工作原理 命令格式 awk常见的内建变量(可直接用) 二.按行输出文本 三.按字段输出文本 四.通过管道.双引号调用shall命令 五.使用awk统计httpd访问日志中每个客户端IP ...

  6. 夜幕降临,我还记得那首歌

    我开始明白 孙岩资本 其实,我做了一个U形转弯 最残酷的时刻 静静地看着你去 所以不像我 和 是透澈的懂了 爱情是流动的 不由人的 何必激动着要理由 相信你仅仅是怕伤害我 不是骗我 非常爱过谁会舍得 ...

  7. Linux文本三剑客之一——awk详解(1)——awk看这两篇就够啦~PS:文末有练习,来练练手吧

    shell编程三剑客 grep --> egrep --> 文本过滤 查询 awk 文本截取 sed  文本的替换和修改 目录 awk awk也可以做小数运算 awk命令简要处理流程 aw ...

  8. 费米悖论的三十种解释 | 观点

    © David B. Mattingly 来源:公众号利维坦(ID:liweitan2014) 文:Ella Alderson 译:Rachel 校对:Yord 原文:medium.com/predi ...

  9. 费米悖论的三十种解释

    © David B. Mattingly 来源:利维坦  文:Ella Alderson 译:Rachel 校对:Yord 原文:/medium.com/predict/30-solutions-to ...

最新文章

  1. 青岛大学计算机专硕和学硕,【2020】【青岛大学】【学硕646】复习经验
  2. cookie与session区别|详细版
  3. 在VS2010中配制Elmah邮件发送到Gmail
  4. jvm内存分配与收回策略
  5. 《机器学习实战》程序清单4-2 朴素贝叶斯分类器训练函数
  6. org.apache.commons.lang.StringUtils中常用的方法
  7. 在线解压rar_解压指南!新手必看
  8. 596. 超过5名学生的课
  9. PHP-文件下载功能总结
  10. CMM3 正式评估全过程
  11. Python数据结构与算法视频教程-王宁宁-专题视频课程
  12. Vmware安装显示Microsoft Runtime DLL 安装程序未能完成安装
  13. 愤怒的小鸟 高清完整版下载
  14. python爬虫和医学数据_【爬虫】(八)Python之爬虫和数据小解析
  15. Google工具包Guava——聊聊代码校验Preconditions
  16. python图片转手绘_python图片转素描软件
  17. 浅谈Android之SurfaceFlinger相关介绍(一)
  18. 核心单词Word List 42
  19. ICME2021:基于机器视觉的RD模型
  20. sm2电子印章结构体

热门文章

  1. Android实现调用相机拍摄图片并post上传
  2. 惊呆了!被公司辞退拿了 22 万补偿金,原东家称每月涨薪 7000,只要退还 22 万...
  3. Uber jvm profiler 使用
  4. HBase Shell基础操作命令
  5. 美国一年就印了6个币圈市值出来,钱都去哪了?
  6. NOIP2008全省提高组获奖名单
  7. 三代基因组全基因组的变异检测
  8. 基于51单片机的红外遥控信号的发射和接收
  9. 怎么使用ST的库开发STM32
  10. ssj(spring+springMVC+jpa)项目速建