一分钟学awk够用(产品经理都懂了)

1分钟懂awk-技不在深,够用就行

1.什么是AWK (1)Aho、Weinberger、Kernighan三位发明者名字首字母; (2)一个行文本处理工具;

2.AWK基本原理 2.1原理:逐行处理文件中的数据

2.2语法

awk 'pattern + {action}'

说明: (1)单引号''是为了和shell命令区分开; (2)大括号{}表示一个命令分组; (3)pattern是一个过滤器,表示命中pattern的行才进行action处理; (4)action是处理动作; (5)使用#作为注释; 例子:显示hello.txt中的第3行至第5行

cat hello.txt | awk 'NR==3, NR==5{print;}'

2.3pattern说明 pattern参数可以是egrep正则中的一个,正则使用/pattern/ 例子:显示hello.txt中,正则匹配hello的行

cat hello.txt | awk '/hello/'

说明: (1)pattern和action可以只有其一,但不能两者都没有; (2)默认的action是print; 例子:显示hello.txt中,长度大于100的行号

cat hello.txt | awk 'length($0)>80{print NR}'

3.内置变量 FS 分隔符,默认是空格 NR 当前行数,从1开始 NF 当前记录字段个数 $0 当前记录 $1~$n 当前记录第n个字段 例子:显示hello.txt中的第3行至第5行的第一列与最后一列

cat hello.txt | awk 'NR==3, NR==5{print $1,$NF}'

4.内置函数 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程序结束前,做一些收尾的工作。 例子:统计字符个数

awk 'BEGIN{count=0;}{count+=length($0);}END{print count;}'

6.2流程控制语句 (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中定义的变量:使用单引号即可;

#!/bin/bashSTR="hello"echo | awk '{print "'${STR}'";}'

(2)awk中使用shell命令:使用双引号,或者system命令;

#!/bin/bashecho hello | awk '{print $0 | "cat"}'

或者

#!/bin/bashecho | awk '{system("date > date.txt")}'

(3)awk中的变量传出至shell:没有什么好方法,老老实实用文件吧; (4)getline:awk里,从文件中读取变量到awk中

#!/bin/bashecho | awk '{while(getline < "date.txt"){print $0;}}'

8.结束语

对不起,楼主欺骗了你,认真看完本文或许不止1分钟。不过,如果你真的认真阅读并超过了1分钟,相信你会有收获。

原文发布于微信公众号 - 架构师之路(road5858)

原文发表时间:2015-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xiaoheike

Hibernate save, saveOrUpdate, persist, merge, update 区别

hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保...

1473
来自专栏Golang语言社区

go语言的sql包原理与用法分析

本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driv...

4496
来自专栏跟着阿笨一起玩NET

【C#】Entity Framework 增删改查和事务操作

  方法二:方法一中每次都需要对所有字段进行修改,效率低,而且麻烦,下面介绍修改部分字段

981
来自专栏用户2442861的专栏

初学Redis(2)——用Redis作为Mysql数据库的缓存

http://blog.csdn.net/qtyl1988/article/details/39519951

1752
来自专栏分布式系统进阶

Librdkafka的基础数据结构 2 --- 定时器 原子操作与引用计数

引用了一个新的struct来将引用计数和调用信息结合起来, 使用链表来管理这个struct的对象. 每次对引用计数的操作都要操作这个链表.

961
来自专栏Golang语言社区

go语言的sql包原理与用法分析

go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。...

3014
来自专栏Hongten

Lucene学习总结之三:Lucene的索引文件格式(1)

Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。

1122
来自专栏Android 研究

OKHttp源码解析(五)--OKIO简介及FileSystem

okio是由square公司开发的,它补充了java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理你的数据。OKHttp底层也是用该库...

2012
来自专栏机器学习从入门到成神

Java知识点总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

1811
来自专栏耕耘实录

Linux三大剑客之awk

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1624

扫码关注云+社区

领取腾讯云代金券