awk工具

摘要:
AWK是一个优秀的文本处理工具。在Linux和Unix环境中可用的最强大的数据处理引擎之一被命名为AWK,其首字母是三位发明家Aho、Weinberger和Kernighan。AWK是一种行级文本高效处理工具。改进后的AWK新版本包括Nawk和Gawk。通常,Linux默认为Gawk。Gawk是AWK的GNU开源免费版本。

        AWK是一个优良的文本处理工具,LinuxUnix环境中现有的功能最强大的数据处理引擎之一,以Aho、Weinberger、Kernighan三位发明者名字首字母命名为AWK,AWK是一个行级文本高效处理工具,AWK经过改进生成的新的版本有Nawk、Gawk,一般Linux默认为Gawk,Gawk是 AWK的GNU开源免费版本。

         AWK基本原理是逐行处理文件中的数据,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤,如果找不到匹配内容,则继续处理下一行。

1)AWK基本语法参数详解:

awk    'pattern   +   {action}'     file

      单引号' '是为了和shell命令区分开;

      大括号{ }表示一个命令分组;

      pattern是一个过滤器,表示匹配pattern条件的行才进行Action处理;

      action是处理动作,常见动作为Print;

      使用#作为注释,pattern和action可以只有其一,但不能两者都没有。

2)AWK内置变量详解:

FS        分隔符,默认是空格;

OFS       输出分隔符;

NR        当前行数,从1开始;

NF        当前记录字段个数;

$0        当前记录;

$1~$n     当前记录第n个字段(列)

3)AWK内置函数详解:

gsub(r,s):           在$0中用s代替r;

index(s,t):          返回s中t的第一个位置;

length(s):           s的长度;

match(s,r):          s是否匹配r;

split(s,a,fs):       在fs上将s分成序列a;

substr(s,p):         返回s从p开始的子串。

4)AWK常用操作符,运算符及判断符:

++ --                           增加与减少( 前置或后置);
^ **                         指数( 右结合性);
! + -                        非、一元(unary) 加号、一元减号;
+ - * / %                    加、减、乘、除、余数;
< <= == != > >=              数字比较;
&&                           逻辑and;
||                           逻辑or;
= += -= *= /= %= ^= **=      赋值。

5)AWK与流程控制语句:

if(condition) { } else { };
while { };
do{ }while(condition);
for(init;condition;step){ };
break/continue

6)常用AWK工具企业演练案列:

例1: AWK打印硬盘设备名称,默认以空格为分割:

df    -h|awk  '{print  $1}'

例2:AWK以空格、冒号、 、分号为分割:

awk  -F '[ :	;]'  '{print  $1}'   jfedu.txt

例3:AWK以冒号分割,打印第一列,同时将内容追加到/tmp/awk.log下:

awk  -F:  '{print $1 >>"/tmp/awk.log"}'  jfedu.txt

例4:打印jfedu.txt文件中的第3行至第5行,NR表示打印行,$0表示文本所有域:

awk 'NR==3,NR==5  {print}'        jfedu.txt
awk 'NR==3,NR==5  {print $0}'     jfedu.txt

例5:打印jfedu.txt文件中的第3行至第5行的第一列与最后一列:

awk 'NR==3,NR==5 {print $1,$NF}'       jfedu.txt

例6:打印jfedu.txt文件中,长度大于80的行号:

awk   'length($0)>80 {print NR}'        jfedu.txt

例7: AWK引用Shell变量,使用-v或者双引号+单引号即可:

awk -v STR=hello  '{print STR,$NF}'      jfedu.txt
STR="hello";echo| awk  '{print "'${STR}'";}'

例8: AWK以冒号切割,打印第一列同时只显示前5行:

cat  /etc/passwd|head -5|awk  -F:   '{print $1}'
awk  -F:  'NR>=1&&NR<=5  {print $1}'  /etc/passwd

例9: Awk指定文件jfedu.txt第一列的总和:

cat jfedu.txt |awk '{sum+=$1}END{print sum}'

例10:AWK NR行号除以2余数为0则跳过该行,继续执行下一行,打印在屏幕:

awk  -F:  'NR%2==0 {next} {print NR,$1}'  /etc/passwd

例11:AWK添加自定义字符:

ifconfig  eth0|grep "Bcast"|awk '{print "ip_"$2}'

例12:AWK与if组合实战,判断数字比较:

echo 3 2 1 | awk '{ if(($1>$2)||($1>$3)) { print $2} else {print $1} }'

例13:AWK与数组组合实战,统计passwd文件用户数:

awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}'  /etc/passwd

例14:awk分析Nginx访问日志的状态码404、502等错误信息页面,统计次数大于20的IP地址。

awk '{if ($9~/502|499|500|503|404/) print $1,$9}' access.log|sort|uniq –c|sort –nr | awk '{if($1>20) print $2}'

例15:Awk统计服务器状态连接数:

netstat -an | awk '/tcp/ {s[$NF]++} END {for(a in s) {print a,s[a]}}'
netstat -an | awk '/tcp/ {print $NF}' | sort | uniq -c

免责声明:文章转载自《awk工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇APP的CPU,内存,耗电,流量测试工具Pycharm无法打开,双击没反应下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Centos7 升级python3,解决升级后不兼容问题

  2017年09月05日 21:16:39阅读数:2274 转载来自:http://www.jianshu.com/p/a538125371d4   Centos7 安装python3详细教程,解决升级后不兼容问题 作者 单单丹丹  2017.06.04 21:52* 字数 940 一、确实当前python版本 [root@cent...

awk扩展应用

                                                                        awk扩展应用 案例1:使用awk提取文本 案例2:awk处理条件 案例3:awk综合脚本应用 案例4:awk流程控制 案例5:awk扩展应用 1案例1:使用awk提取文本 1.1问题 本案例要求使用awk工具完成...

python图像处理之pyocr

使用pyocr类库进行ocr识别,其中tools为’Tesseract’ #!/usr/bin/env python #coding=utf-8 __author__ = 'zhangdebin' from PIL import Image import sys import pyocr tools = pyocr.get_available_to...

groovy初体验:groovy在java中的应用

第一次接触groovy,主要是在java中嵌入groovy脚本,因为groovy和java的融合度非常好。 先放上来第一次写的一段groovy: 其实它完成的就是一句java的system.out操作,主要为了理解binding在groovy中的应用 说一下背景,这里的功能是为了打印日志,本来用的是system.out,结果师父为了让我接触一下groov...

apache httpd.conf配置及php.ini配置建议

1)     php.ini配置 扩展配置 (注意观察extention_dir路径是否与物理路径一致) extension=php_gd2.dll 几乎是必开,这个图形处理扩展被广泛地应用在上传头像处理、在线照片处理、验证码等等地方。 extension=php_mbstring.dll 几乎也是必开,没有他,多字节字符串(如中文)截取将会变得异常的复杂...

出现这个错误说明是程序在调用'ZipArchive' 这个类的时候没有成功

出现这个错误说明是程序在调用'ZipArchive' 这个类的时候没有成功,原因是由于在安装php的时候没有增加php zip的支持(非zlib)。在Windows下的解决办法是:1、在php.ini文件中,将extension=php_zip.dll前面的分号“;”去除;(如果没有,请添加extension=php_zip.dll此行并确保php_zip...