awk 命令详解
awk [options] 'script' var=value file
awk [options] -f scriptfile var=value file
常用命令选项:
-F fs 指定输入分隔符, fs 可以似乎字符串或正则表达式-v var=value 赋值一个用户定义变量,将外部变量传递给awk-f scriptfile 从脚本文件中读取awk 命令
awk 模式和操作
awk 脚本是由模式和操作组成的*模式可以是一下任意一个/正则表达式/: 使用通配符的扩展集关系表达式: 使用运算符进行操作, 可以是字符串或数字的比较测试模式匹配表达式: 用运算符~ 匹配 ~! 不匹配BEGIN 语句块、pattern语句块、END语句块*操作操作由一个或多个命令,函数,表达式组成,之间用换行符或分号隔开, 并位于大括号内,主要部分是:变量或数组赋值 , 输出命令, 内置函数, 控制流语句
awk 脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' fileawk "BEGIN{ i=0} {i++} END{ print i}" fileawk 'BEGIN{ i=0} {i++} END{ print i}' file一个awk 脚本通常由: BEGIN语句块,能够使用模式匹配的通用语句块,END语句块3本分组成, 这三个部分是可选的。任意一部分都可以不出现在脚本中, 脚本通常是在单引号或双引号中。
awk 'BEGIN{ commands} pattern {commands} END{ commands}'第一步:执行BEGIN{ commands} 语句块中的语句第二部: 从文件或标准输入(stdin)读取一行, 然后执行pattern {commands} 语句块,它逐行扫描文件,从第一行到最后一行重复这个过程, 知道文件全部被读取完毕第三部: 当读取至输入流末尾时, 执行END{commands}语句块BEGIN: 在awk 开始从输入流中读取行之前被执行, 这是可选语句块 , 比如变量初始化,打印输出列表的表头等语句通常可以写在BEGIN语句块中pattern: 通用命令是最重要的部分,它也是可选的, 如果没有提供pattern 与句酷,则默认执行{pring},即打印每一个读取到的行,awk 读取的每一行都会执行该语句块END: 在awk输入流读取完所有的行之后即被执行,比如所有行的汇总信息都是在END语句块中完成 ,可选
实例:
echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "start"} {print} END{print "end"}'echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'v1 v2 v3当使用不带参数的print时,它就打印当前行,当print的参数是以逗号进行分隔时,打印时则以空格作为定界符。在awk的print语句块中双引号是被当作拼接符使用echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' v1=v2=v3双引号拼接使用
说明:【A】awk 【N】nawk【P】POSIXawk【G】gawk 表示第一个支持变量的工具$n 当前记录的第n个字段, 当n =0 时包括整行[N] ARGC 命令行参数的数目[G] ARGIND 命令行中当前文件的位置 从0 开始算[N] ARGV 包含命令行参数的数组[G] CONVFMT 数字转换格式(默认值%。6g)[P] ENVIRON 环境变量关联数组[N] ERRNO 最后一个系统错误的描述[G] FIELDWIDTHS 字段宽度列表 (空格键分隔)[A] FILENAME 当前输入文件的名[P] FNR 同NR 但相对于当前文件[A] FS 字段分隔符(默认是空格)[G] IGNORECASE 如果为真, 则进行忽略大小写的匹配[A] NF 表示字段数, 在执行过程中对应于当前的字段数[A] NR 表示记录数, 在执行过程中对应于当前的行号[A] OFMT 数字的输出格式(默认是%。6g)[A] ORS 输出记录分隔符 (默认是一个换行符)[A] OFS 输出字段分隔符(默认是一个空格)[A] RS 记录分隔符(默认是一个换行符)[N] RSTART 由match 函数所匹配的字符串的第一个位置[N] RLENGTH 由match 函数所匹配的字符串长度[N] SUBSEP 数组下标分隔符(默认值是34)
实例:
*echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "line No:"NR",No of fields:"NF,"$0="$0."$1="$1,"$2="$2,"$3="$3}'Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7*echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'print $NF 可以打印出一行中的最后一个字段, 使用$(NF-1) 是打印倒数第二个字段。*echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $2,$3}'打印每一行的第二和第三个字段*awk 'END{ print NR}' filename统计文件中的行数*seq 5 | awk 'BEGIN{ sum=0; print "总和:"} {print $1"+"; sum+=$1} END{print "等于"; print sum}'每行第一个字段值累加
将外部变量值传递给awk
借助-v 选项,可以将外部值(并非来自stdin) 传递给awkVAR=1000echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
作为一种程序设计语言所应具有的特点之一, awk 支持多种运算, 这些运算与C语言提供的基本相同。awk 还提供了一系列内置的运算函数(如 log ,sqr ,cos,sin) 和一些对于字符串进行操作的函数(length,substr) 。这些函数的引用大大的提高了awk 的运算功能。 作为对条件转移指令的一部分, 反洗判断是美中程序设计语言都具备的功能, awk 也不例外,awk中允许进行多种测试, 作为样式匹配, 还提供了模式匹配表达式~ (匹配)和~! (不匹配) 。 作为对测试的一种扩充,awk 支持用逻辑运算符。
*算术运算符:
+ - : 加减* / &:乘除 求余+ - ! : 一元加,减和逻辑非^*** : 求幂++ -- : 增加或减少, 作为前缀或后缀例: awk ‘BEGIN{ a=0; print a++,++a;}'0 2a++ : 先输出,再自加1,++a : 先自加1,再输出,所有用做算术运算符进行操作, 操作数自动转为数值, 所有非数值都变为0
= += -= *= /= %= ^= **= 赋值语句例: a+= 5; a=a+5;
|| 或&& 与例: awk 'BEGIN{ a=1;b=2; print (a>5 &&b<=2), (a>5) || b<=2);}'0 1
~ ~!例: awk 'BEGIN{ a="100test"; if(a ~ /^100*/) {print "ok" ;} }'
< <= > >= != == 关系运算符
例: awk 'BEGIN{ a=11; if (a>9) {print "ok"}}'
>< 可以作为字符串比较,也可以用作数值比较, 关键看操作数如果是字符串就会转换为字符串比较。 两个都为数字才转为数值比较。 字符串比较: 按照ASCII 码顺序比较。
* 其他运算符
$ 字段引用
空格 字符串连接符
?: c条件表达式
in 数组中是否存在某键值
例: awk 'BEGIN{a="b"; print a=="b"? "ok":"err";}'
awk 'BEGIN{a="b"; arr[0]="b"; arr[1]="c" ; print (a in arr);}' 打印所在数组位置0
awk 命令详解的更多相关文章
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- linux awk命令详解,使用system来内嵌系统命令, awk合并两列
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- Shell学习(五)—— awk命令详解
一.awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...
- awk命令详解
搜索 纠正错误 添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...
- [Linux] linux awk命令详解
reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...
- [转]linux awk命令详解
原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢 ...
- Linux awk命令详解??????????(研究)
http://blog.chinaunix.net/uid-25120309-id-3801250.html 一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进行 ...
- [Linux] AWK命令详解(大全)
转载自:http://caoyanbao.iteye.com/blog/570868 什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk ...
随机推荐
- makefile 中=与:=的差别
1."=" make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整个makefile中最后被指定的值.看例子: x = foo y = $(x) bar ...
- SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...
- 51Nod 1256 乘法逆元 扩展欧几里得
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = ...
- mysql索引优化面试题
曾经偷偷的面试了两个单位,都提到了Mysql的优化问题,所以以后要多多学习数据库的优化知识了.建设数据库的优化大概主要就是索引的优化了吧,因为我们不可能修改数据结构的情况下,提高数据库的查询效率似乎也 ...
- 参加完Rocket MQ Meetup深圳站,回顾和想法
最近一段时间才开始关注云栖社区的公众号,在两周前看到要在深圳科兴科学园办一场Rocket MQ的Meetup.因为从来没有参加过这种线下活动,而且对Rocket MQ比较感兴趣,所以就立即报名参加. ...
- Python笔记·第六章——集合 (set) 的增删改查及 copy()方法
简介: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 1.去重,把一个列表变成集合,就自动去重了. ...
- myeclipse将java项目转换成web项目,导出war包
1.项目右击属性,勾选以下两项,点击apply,关掉窗体,又一次打开 2.打开assembly,删掉webroot文件夹.把相应的webapp文件夹加入进来 watermark/2/text/aHR0 ...
- 卡尔曼滤波(Kalman Filter)
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...
- 被动式Telnet研究及实现(解决内外网远程维护的困难)-part A
欢迎转载.转载请保留原文链接:http://blog.csdn.net/mikulee/article/details/40149779 项目背景及需求: 近期公司有一个项目: 我们在一个arm主机上 ...
- Js动态操作表格
HTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" co ...