加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

awk命令详细说明

发布时间:2023-10-31 10:35:39 所属栏目:Linux 来源:互联网
导读:   awk是一款文本分析工具awk相对于grep、sed来说显得尤为强大,awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息。



  awk内置变量



   ARGC 命
  awk是一款文本分析工具awk相对于grep、sed来说显得尤为强大,awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息。
 
  awk内置变量
 
   ARGC        命令行参数个数``ARGV        命令行参数排列``ENVIRON      支持队列中系统环境变量的使用``FILENAME      ``awk``浏览的文件名``FNR        浏览文件的记录数``FS         设置输入域分隔符,等价于命令行 -F选项``NF         浏览记录的域的个数``NR         已读的记录数``OFS        输出域分隔符``ORS        输出记录分隔符``RS         控制记录分隔符``$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
 
   $NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数
 
  常用的命令展示
 
  awk擅长列输出
 
  搜索/etc/passwd有root关键字的所有行
 
   awk` `'/root/'` `/etc/passwd` `【这种是pattern的使用,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)】
 
  搜索/etc/passwd有root关键字的所有行,并显示对应的shell
 
   awk` `-F: ``'/root/ {print $7}'` `/etc/passwd
 
  统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
 
   awk` `-F ``':'` `'{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}'` `/etc/passwd
 
  使用printf替代print,可以让代码更加简洁,易读
 
   awk` `-F: ``'{printf ("filename:%10s, linenumber:%3s,column:%3s,content:%3f\n",FILENAME,NR,NF,$0)}'` `/etc/passwd
 
  打印/etc/passwd/的第二行信息
 
   awk` `-F: ``'NR==2{print "filename: "FILENAME, $0}'` `/etc/passwd
 
  awk的过滤使用方法
 
   ls` `-lF | ``awk` `'/^d/'
 
  image 指定特定的分隔符,查询第一列
 
   awk` `-F ``":"` `'{print $1}'` `/etc/passwd
 
  image 指定特定的分隔符,查询最后一列
 
   awk` `-F ``":"` `'{print $NF}'` `/etc/passwd
 
  image 指定特定的分隔符,查询倒数第二列
 
   awk` `-F ``":"` `'{print $NF-1}'` `/etc/passwd
 
  image 获取第12到31行的第一列的信息
 
   awk` `-F ``":"` `'{if(NR12) print $1}'` `/etc/passwd

  多分隔符的使用:
 
   [root@localhost ftl]``# awk -F "[/]" 'NR == 4 {print $0,"\n",$1}' /etc/passwd``这里以/为分隔符,多个分隔符利用[]然后在里面写分隔符即可
 
  添加了BEGIN和END
 
   [root@localhost ftl]``# cat /etc/passwd | awk -F: 'BEGIN{print "name, shell"} {print $1,$NF} END{print "hello world"}'

  查看最近登录最多的IP信息
 
   [root@localhost ftl]``# last | awk '{S[$3]++} END{for(a in S ) {print S[a],a}}' |uniq| sort -rh
 
  利用正则过滤多个空格
 
   [root@localhost ~]``# ifconfig |grep eth* | awk -F '[ ]+' '{print $1}'
 
  awk编程–变量和赋值
 
  除了awk的内置变量,awk还可以自定义变量, awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。
 
  统计某个文件夹下的大于100k文件的数量和总和
 
   ls` `-l|``awk` `'{if($5>100){count++; sum+=$5}} {print "Count:" count,"Sum: " sum}'` `【因为``awk``会轮询统计,所以会显示整个过程】``ls` `-l|``awk` `'{if($5>100){count++; sum+=$5}} END{print "Count:" count,"Sum: " sum}'` `【天界END后只显示最后的结果】
 
   备注:count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开
 
  统计显示/etc/passwd的账户
 
   awk` `-F: ``'{count++;} END{print count}'` `/etc/passwd`    `cat` `/etc/passwd``|``wc` `-l``awk` `-F ``':'` `'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i
 
  通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
 

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章