三大搜索利器 -- awk

三大搜索利器 -- awk,第1张

概述awk 的特点   文本与数据的处理工具; 可编程: 处理灵活, 功能强大;   awk 应用   统计 制表 等   awk 处理方式 与 格式   awk 处理方式 awk 一次处理一行内容; awk 对每行可以切片处理; awk ‘{print $1}‘         # 打印输出首个单词, 默认是空格分割;   awk 格式 命令行格式 awk [options] ‘command‘ f

awk 的特点

  文本与数据的处理工具; 可编程: 处理灵活,功能强大;

 

awk 应用

 

统计 制表 等

 

awk 处理方式 与 格式

 

awk 处理方式

awk 一次处理一行内容; awk 对每行可以切片处理; awk ‘{print $1}‘         # 打印输出首个单词,默认是空格分割;

 

awk 格式

命令行格式 awk [options] ‘command‘ file(s)
command : pattern {awk *** 作命令} pattern : 正则表达式,逻辑判断式 *** 作命令可用: 内置函数 : print()  printf()  getline...; 控制指令 : if () {...} else {...}; while () {...}; 脚本格式 awk -f awk-script-file file(s)

 

awk 内置参数的应用

 

awk 内置变量 (1) $0 : 表示当前行; $1 : 表示第一个字段; $2 : 表示第二个字段; ... ... awk 内置参数 : 分隔符 options : -F fIEld-swparator ( 若不指定的话,默认使用空格作为 分隔符 ); 示例: awk -F ":" ‘{print $3}‘ /etc/passwd            # 以 : 分割,打印第三个字段; awk 内置变量 (2) NR : 每行的记录号 ( 每行的行号 ); NF : 字段数量变量 ( 字段中字段的种数 ); filename: 正在处理的文件名; 使用案例
// awk 打印多个内容;awk -F ":" {print ,} passwd            // 使用逗号分隔,打印的内容以空格分隔;    ... ...    tian 502awk -F ":" {print "------"} passwd    // 使用指定的符号进行分隔;    ... ...    tian------502awk -F ":" {print "Username:""  ""UUID:"} passwd        // 添加相应内容的说明;    ... ...    Username:tian  UUID:502// awk 使用 NR,NF,filename 参数;awk -F ":" {print NR,NF} passwd            // 使用 NR 打印行号,NF 打印多少个字段;    ... ...    27 7    28 7awk -F ":" {print filename} passwd        // 每行都打印处理的文件名;    ... ...    passwd    passwd    // ****************************** 案例 一 **********************************‘‘‘ 显示 passwd 每行的行号,每行的列数,对应行的用户名,使用 print 和 printf() 两种方法实现 ‘‘‘awk -F ":" {print NR"  "NF"  "} passwd            // 使用 print;    ... ...    27  7  zxjr    28  7  tianawk -F ":" {printf("%2s %s %s\n",NR,)} passwd        // 使用 printf() 函数;    ... ...        // 2 表示占用的字符数,使打印更整齐;    27  7  zxjr    28  7  tian    // ******************************* 案例 二 **********************************‘‘‘ 显示 passwd 中用户 ID 大于100 的行号和用户名 (使用  if ... else ...)‘‘‘awk -F ":" {if (>100) print NR"  "} passwd    ... ...    27  zxjr    28  tian    // ******************************* 案例 三 **********************************‘‘‘ 在服务器 log 中找出 Error 的发生日期‘‘‘sed -n /Error/p /var/log/messages |awk {print ,,}            // 方法一;awk /Error/ {print ,} /var/log/messages                       // 方法二;

 

awk 逻辑判断

 ~,!~ : 匹配正则表达式; ==,!=,<,> : 判断逻辑表达式;
// 匹配  是以 t 开头的行;awk -F ":" ~/^t.*/ {print } passwd    tian// 匹配  不以 t 开头的行;awk -F ":" !~/^t.*/ {print } passwd    root    ... ...// 判断 UUID 大于 500 的输出用户名;awk -F ":" >500 {print } passwd     zxjr    tian// 判断 UUID 等于 502 的输出用户名;awk -F ":" ==502 {print } passwd     tian

 

 

awk -- 扩展格式

 command 扩展 格式: BEGIN{print "start"} pattern{commands} END {print "end"}
// 制表显示 passwd 每行的行号,对应行的用户名awk -F ":" BEGIN{print "line   Col   User"}{print NR"      "NF"      "}END{print "------"filename"------"} passwd     line   Col   User    1      7      root    2      7      bin    ... ...    10      7      uucp    ... ...    ------passwd------// 比较美观的写法;awk -F ":" BEGIN{print "line      Col      User"}{printf("%2s%10s%s%s\n","       ",)}END{print "------"filename"------"} passwd    ... ...    line      Col      User     1         7       root     2         7       bin    ... ...    10         7       uucp    ... ...    ------passwd------

 

awk -- 案例

 

// ***************************** 案例 一 ********************************‘‘‘ 统计当前文件夹下的 文件/文件夹 占用的大小 ‘‘‘// 定义 size 变量,size 累加文件及目录的大小,打印总和;ls -l |awk BEGIN{size=0}{size+=}END{print " Size is: "size} Size is: 1024038984// 添加单位,进行换算;ls -l |awk BEGIN{size=0} {size+=} END{print " Size is: "size/1024"M"} Size is: 1.00004e+06M // ***************************** 案例 二 ********************************‘‘‘ 统计显示 passwd 的账户总人数 ( 要考虑空行的可能 ) ‘‘‘// 开始,定义计数器,匹配排除空行,自加一,结束,打印总数;awk BEGIN{count=0} !~/^$/{count++} END{print " Totle: "count} passwd  Totle: 28 // ***************************** 案例 三 ********************************‘‘‘ 统计显示 passwd 文件中 UUID 大于 100 的用户 ‘‘‘// 定义计数器,判断 UUID 大于 100; 定义一个数组,将值与用户对应,使用 for 循环打印用户名;awk -F ":" BEGIN{count=0} {if (>100) name[count++]=} END{for (i=0;i<count;i++) print i,name[i]} passwd    0 abrt    1 saslauth    2 Nginx    3 zxjr    4 tian    // ****************************** 案例 四 ********************************‘‘‘ 统计 netstat -anp 状态下为 ListEN 和 CONNECTED 的连接数量 ‘‘‘// 定义计数器,判断状态行等于两种状态时,计数器自加一,打印总数;netstat -anp |awk BEGIN{count=0} {if (=="ListEN"||=="CONNECTED") count++} END{print " Connect Totle: "count} Connect Totle: 68// 状态行匹配两种状态的其中一种,匹配到哪种,哪种自加一,使用 for 循环打印;netstat -anp |awk ~/CONNECTED|ListEN/ {sum[]++} END{for (i in sum) print " ",i,sum[i]}  CONNECTED 64  ListEN 4

 

 

awk 总结

               

总结

以上是内存溢出为你收集整理的三大搜索利器 -- awk全部内容,希望文章能够帮你解决三大搜索利器 -- awk所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/1028665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存