linux awk用法
awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大。
使用方法:awk [options] 'BEGIN{ commands } pattern{ commands } END{ commands }' file,其中commands都包含在大括号内。
第一步:运行BEGIN{ commands }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,以空格为默认分隔符将每行切片,然后运行pattern{ commands }语句块,逐行读取直到文件被读取完毕
第三步:读至输入流末尾时运行END{ commands }语句块
1.一个简单的awk用法实例:
[root@oldboy ~]# awk -F: '{print $1,$6}' /etc/passwd
root /root
bin /bin
daemon /sbin
adm /var/adm
……
其中参数-F:指定原文件以:分片,print表示打印,$1和$6表示每一行的第1片和第6片($0表示整行内容),/etc/passwd表示要处理的文件。
2.使用pattern部分
上述例子表示对每一行进行处理,而使用pattern则可对满足条件的行进行处理。
例如创建一个文件b.txt
[root@oldboy ~]# cat b.txt
Alice girl
Bob boy dance bike
Jane girl
Lily girl tennis
[root@oldboy ~]# awk '$2>=20{print $1,$2}' b.txt
Bob
Lily
$2>=20表示第2片的值大于等于20时,才进行后续的打印操作。
3.begin语句块
begin语句块是在awk匹配文件之前运行的并且只执行一次,所以在begin语句块中$n是不可用的。一般情况下可以在begin语句块中做一些变量初始化的工作,或者一些只需要在开始打印一次的内容(例如输出表的表头)。
4.end语句块
end语句块是在awk循环执行完所有行的处理之后再执行的,end语句块中的内容也只执行一次,一般用于打印一些只需在末尾输出一次的内容。
注意begin语句块、pattern语句块和end语句块都在一个单引号内,并且单引号内的需要使用双引号。(尝试外层用双引号内层用单引号,有报错)
[root@oldboy ~]# awk 'BEGIN{print "name","age","gender"} $2>=20{print $1,$2,$3} END{print "end"}' b.txt
name age gender
Bob boy
Lily girl
end
5.awk使用变量
①awk中内置变量
FILENAME:awk浏览的文件名 NF:浏览记录的域的个数
NR:已读的记录数,如果有多个文件这个值不断累加 FNR:当前记录数,即自身文件的行号
FS:设置输入域分隔符,等价于-F参数 OFS:设置输出域分隔符
RS:输入的记录分隔符, 默认为换行符 ORS:输出的记录分隔符, 默认为换行符
ARGC:命令行参数个数 ARGV:命令行参数排列 ENVIRON:支持队列中系统环境变量的使用
[root@oldboy ~]# awk -v OFS='#' '{print "文件名:"FILENAME,"浏览记录数:"NR,"域个数:"NF,"行内容:"$1,$2} END{print "文件"FILENAME"处理完毕,行数为"NR}' b.txt
文件名:b.txt#浏览记录数:#域个数:#行内容:Alice#
文件名:b.txt#浏览记录数:#域个数:#行内容:Bob#
文件名:b.txt#浏览记录数:#域个数:#行内容:Jane#
文件名:b.txt#浏览记录数:#域个数:#行内容:Lily#
文件b.txt处理完毕,行数为4
②自定义变量
[root@oldboy ~]# a=
[root@oldboy ~]# b=
[root@oldboy ~]# awk -v x=$a -v y=$b 'BEGIN{print x+y}' [root@oldboy ~]# awk -F# 'BEGIN{COUNT=0} {count+=$2} END{print count}' a.txt
6.awk中的判断语句
[root@oldboy ~]# awk '$2>20{print}' b.txt
Lily girl tennis
[root@oldboy ~]# awk '{if($2>20) print}' b.txt
Lily girl tennis
[root@oldboy ~]# awk 'BEGIN{age=25;if(age>18){print "成年人"} else if(age==18){print "刚好18岁"} else{print "未成年人"} }'
成年人
7.awk中的循环语句
[root@oldboy ~]# awk 'BEGIN{sum=0;i=1;while(i<51){sum+=i;i++} print sum}'
[root@oldboy ~]# awk 'BEGIN{sum=0;i=1;do{sum+=i;i++}while(i<51) print sum }'
[root@oldboy ~]# awk 'BEGIN{sum=0;for(i=1;i<51;i++) {sum+=i} print sum}'
在判断语句和循环语句中,多条语句之间用分号隔开,复合语句块用大括号括起来。
awk循环语句中使用continue跳过当前循环,使用break退出整个循环。
8.awk使用数组
[root@oldboy ~]# cat test.txt
zhangsan
lisi
zhangsan
lisi
wangwu
[root@oldboy ~]# awk '{sum[$1]+=$2} END{for(k in sum) print k,sum[k]}' test.txt
zhangsan
lisi
wangwu
linux awk用法的更多相关文章
- linux awk的用法
linux awk的用法 <pre>[root@iZ23uewresmZ ~]# cat /home/ceshis.txtb 12 42 30 b 03 43 25 a 08 10 16 ...
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- awk 用法(使用入门)
转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命 ...
- 精通awk系列(4):awk用法入门
回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0 ...
- Linux awk命令 --三剑客老大
Linux awk命令 --三剑客老大 基本用法: awk [参数] ['找谁{干啥}'] 文件 参数: -F 分隔符 -v 创建或修改awk变量 OFS 输出分割符 awk显示每一列的时候分隔 ...
- linux awk命令详解,使用system来内嵌系统命令, awk合并两列
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- linux awk 命令实用手册
0,简介 Linux awk 是一个实用的文本处理工具,它不仅是一款工具软件,也是一门编程语言.awk 的名称来源于其三位作者的姓氏缩写,其作者分别是Alfred Aho,Peter Weinberg ...
- linux curl用法详解
linux curl用法详解 curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...
- awk用法小结(作者总结)
http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...
随机推荐
- 4.29python
题目: 代码:(?) list = input().split()list1 = []list2 = []for i in range(len(list)): if (i+1)%3 != 0 and ...
- 树莓派与Linux系统之间文件传输
最近因为要学习Python,于是把放在家里接了一年灰的树莓派又给搜出来了,刚买那会也捣鼓了好一阵子, 基本操作都学会了,但现在又忘光了,只能又从头开始搞了,首先第一个要解决的是怎么把文件从电脑传输到树 ...
- 神贴真开眼界:为什么很多人倡导重视能力和素质,但同时对学历有严格要求?——代表了上一场比赛的输赢,招聘成本很重要。如果上一场游戏失败了,尽量让自己成为当前群体的尖子。学历只是其中的一个作品而已,但学历代表了学生时代为之做出的牺牲。人群自有偏向集中性 good
对于软件工程师职位,没学历没关系,如果真觉得自己才高八斗,请在简历里附上 github项目链接或者 appstore/google play上你的作品.如果学历比别人低,那么想必是把时间和精力用在了其 ...
- Android数据库无缝升级方案
软件迭代过程中,业务不断更新,也要求软件持续更新.相应地,数据库更新升级也是不可避免的一个环节.Android作为客户端应用,数据库升级相对于服务端来说会麻烦一些.常见的升级方式有: 1.删除旧表和数 ...
- PL_SQL学习
打印输出: dbms_output.put_line('AA'); 显示服务器输出信息 set serveroutput on; 打印出eid=1的员工姓名: declare v_name varc ...
- lnmp 切换PHP版本,并且安装swoole
lnmp 切换php版本 进入 lnmp 安装的目录,进入install.sh 的目录执行: sudo ./install.sh mphp 备注: find / -name install.sh 备注 ...
- [py]pandas数据统计学习
pandas.core.base.DataError: No numeric types to aggregate错误规避 我没有去解决这个问题, 而用填充0规避了这个问题 统计 聚合 d = [ { ...
- vi命令复制粘贴
2.复制粘贴 yy :复制当前行 p :粘贴到光标所在行的下一行
- !!在js中的用法
var obj = ""; //undefinedconsole.log(!!obj); //false(强制转换成Boolean类型)
- 22.C# 事件
1.事件的含义 事件和异常类似,它们都是由对象引发,我们可以提供代码处理它们.不同的是事件并没有使用try ..catch这样的代码来处理,而是要订阅事件,订阅的含义是提供一段事件处理代码,在事件发送 ...