| 1分钟懂awk-技不在深,够用就行 1.什么是AWK
 (1)Aho、Weinberger、Kernighan三位发明者名字首字母;
 (2)一个行文本处理工具;
 2.AWK基本原理
 2.1原理:逐行处理文件中的数据
 2.2语法:
 说明:
 (1)单引号是为了和shell命令区分开;
 (2)大括号{}表示一个命令分组;
 (3)pattern是一个过滤器,表示命中pattern的行才进行action处理;
 (4)action是处理动作;
 (5)使用#作为注释;
 例子:显示hello.txt中的第3行至第5行
 
 2.3pattern说明| 
 | cat hello.txt | awk NR==3, NR==5{print;} 
 | 
 pattern参数可以是egrep正则中的一个,正则使用/pattern/
 例子:显示hello.txt中,正则匹配hello的行
 
 说明:| 
 | cat hello.txt | awk /hello/ 
 | 
 (1)pattern和action可以只有其一,但不能两者都没有;
 (2)默认的action是print;
 例子:显示hello.txt中,长度大于100的行号
 
 3.内置变量| 
 | cat hello.txt | awk length($0)80{print NR} 
 | 
 FS 分隔符,默认是空格
 NR 当前行数,从1开始
 NF 当前记录字段个数
 $0 当前记录
 $1~$n 当前记录第n个字段
 例子:显示hello.txt中的第3行至第5行的第一列与最后一列
 
 4.内置函数| 
 | cat hello.txt | awk NR==3, NR==5{print $1,$NF} 
 | 
 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开始的子串
 5.操作符
 5.1运算符
 类似于c,支持+、-、*、/、%、++、–、+=、-=等诸多操作;
 5.2判断符
 类似于c,支持==、!=、、=、~(匹配于)等诸多判断操作;
 6.控制流程
 6.1.BEGIN和END
 BEGIN和END本质是一个pattern。
 BEGIN用于awk程序开始开始前,做一些初始化的工作;
 END用于awk程序结束前,做一些收尾的工作。
 例子:统计字符个数
 
 6.2流程控制语句| 
 | awk BEGIN
 {
 count=0;
 }
 {
 count+=length($0);
 }
 END
 {
 print count;
 }
 
 | 
 (1)if(condition){}else{}
 (2)while{}
 (3)do{}while(condition);
 (4)for(init;condition;step){}
 (5)break/continue:如果有END,会执行END中的收尾工作
 个流程控制语句用法几乎与c相同。
 7.awk与shell的交互
 (1)awk中使用shell中定义的变量:使用单引号即可;
 
 (2)awk中使用shell命令:使用双引号,或者system命令;| 
 | #!/bin/bash STR=hello
 echo | awk {
 print ${STR};
 }
 
 | 
 
 或者| 
 | #!/bin/bash echo hello | awk {
 print $0 | cat
 }
 
 | 
 
 (3)awk中的变量传出至shell:没有什么好方法,老老实实用文件吧;| 
 | #!/bin/bash echo | awk {
 system(date  date.txt)
 }
 
 | 
 (4)getline:awk里,从文件中读取变量到awk中
 
 8.结束语| 
 | #!/bin/bash echo | awk {
 while(getline  date.txt)
 {
 print $0;
 }
 }
 
 | 
 对不起,楼主欺骗了你,认真看完本文或许不止1分钟。不过,如果你真的认真阅读并超过了1分钟,相信你会有收获。
 ==【完】==
 
 
  实时好文,欢迎长按关注“架构师之路”
 
 
 ==好文推荐==
 回【join】秒懂SQL中各种join
 
 回【追查】Linux下线上问题常用追查命令
 回【微信】微信为何这么省流量(火)
 回【秒杀】秒杀系统架构优化思路(火)
 回【招聘】入职58到家
 回【设计】数据库架构师该设计什么(新)
 
 
 ==小游戏==
 回大于10的整数,返回随机好文(猜猜怎么实现的)
 
 
 码字不易,求帮转哈
 
 
 |