资讯专栏INFORMATION COLUMN

awk使用小技巧

IT那活儿 / 1763人阅读
awk使用小技巧
简  介 


AWK是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。


使用方法


awk {pattern + action} {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。


内置变量


FS:输入字符分隔符,默认为空白字符

OFS:输出字段分隔符,默认为空白 字符

RS:输入记录分隔符(输入换行符),指定输入时的额换行符

NF:number of Field,当前行的字段的个数,字段数量

NR:行号,当前处理的文本行的行号

FNR:各文件分别计数的行号

FILENAME:当前文件名

ARGC:命令行参数的个数

ARGV:数组,保存的是命令行所给定的各参数

Awk-F :  {printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s ",FILENAME,NR,NF,$0)} /etc/passwd


print和printf


awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。


使用实例介绍


1. 进行简单的四则运算

awk -v a=100 -v b=3 BEGIN{printf("%4.2f ""%d ", a/b, 10/2)}


2. 查看当前的内存使用率,并进行判断,超过60输出提示

vmstat 1 10|sed -n "7,12"p|awk -v ALL=`cat /proc/meminfo |grep MemTotal |awk {printf ("%d ",$2)}`  {sum+=$4}END{print ((ALL-sum/6)/ALL)*100}|awk {if(($(NF))>60) print "memory usage beyond 60,is "$(NF);else print $(NF)}


3.文件系统使用率,超过65输出

df -h |awk -F [ %]+ {if(NR!=1 && $5 >= 65) print $5 " "$6}


4.剔除最后两列输出前面全部内容

echo "/home/oracle/ogg/dirprm/mgr.prm"|awk -F/ {OFS="/"}{NF=NF-2}{print}


5.利用split行转列

echo "12:34:56" | awk {split($0,a,":" ); for (i=1; i<=3; i++) print a[i]}


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129913.html

相关文章

  • Docker 技巧

    摘要:以下都会使用到容器,所以执行以下指令查看容器或者容器名称检查环节变量查看日志备份恢复备份使用进入容器没有剩余磁盘空间使用以下指令删除容器和镜像删除所有容器删除未使用的镜像清理日 以下都会使用到容器 id,所以执行以下指令查看容器 id 或者容器名称 [yexiaobaideMacBook-Pro: ~]$ sudo docker ps CONTAINER ID IMAG...

    wall2flower 评论0 收藏0
  • awk在删除镜像过程中的用法及说明

    摘要:实际上,认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一个域段,域和域之间使用分割符分割。 看到一篇Docker 技巧:删除 Docker 容器和镜像其中提到删除标签为none的镜像的方法,其中用到了awk,就去查了下,下面举例说明: docker rmi $(docker images | awk $1 == && $2 == {print $3...

    lentoo 评论0 收藏0
  • #yyds干货盘点#AIX shell工具集

    摘要:防止文件系统下和根目录下误操作。监控的表空间每月月底执行的脚本每月日执行的脚本跟踪结果的脚本放在脚本最后报警检查系统的进程可修改运行示例 [shell编程] AIX shell工具集AIX1.批量改名或拷贝文件比如将 start.sh文件改为stop.sh拷贝先查看ls -l start*.sh|awk {m=$9; gs...

    番茄西红柿 评论0 收藏2637
  • shell在手分析服务器日志不愁?

    摘要:自己的小网站跑在阿里云的上面偶尔也去分析分析自己网站服务器日志看看网站的访问量。然后统计最终返回的数字就是当前所有端口的已建立连接的总数。 自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量。看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! 1、查看有多少个IP访问: awk {print $1} log_file|sor...

    fyber 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<