AWK用法整理
printf "1:2::3:::4::::5" | awk -F '[:]+' '{print $4}'
[:]+ 表示以1个或多个 :(冒号)作为分隔符
ip addr |awk -F '[ ]+' 'NR==8 {print $3}' | awk -F '/' '{print $1}
NR==8 {print $3} 表示第8行的第3列
cat haproxy.log-20170102 |sed -n '/Jan 1 14:00:00/,/Jan 1 14:05:00/p'|grep 'packet/index'|awk '{print $6}'|cut -d : -f1|sort| uniq -c |sort -k1,1nr|awk '{ SUM += $1 } END { print SUM }' 对第一个字段进行汇总求和
-------------------------------------------------------------
说明:
awk被设计用于数据流,能够对列和行进行操作。而sed更多的是匹配,进行替换和删除。
awk有很多内建的功能,比如数组,函数等。灵活性是awk的最大优势。
awk的结构
awk '
BEGIN{ print "start"}
pattern { commands }
END{ print "end"}'
file
为了偏于观看,我打了回车,实际上是一行
一个awk脚本通常是3部分
1. BEGIN语句块
2. 能够使用模式匹配的通用语句块
3. END语句块
他们任何一部分都可以不出现在脚本中。脚本通常包含在双引号或者单引号内。
例如:
- awk 'BEGIN{i=0}{i++}END{print i}' filename
工作原理
awk命令的工作方式如下:
1. 执行BEGIN{commands}语句块中的语句
2. 从文件或者stdin中读取一行,然后执行pattern{commands}. 迭代直到全部读取完毕
3. 最后执行END{commands}语句块
再次提醒,他们任何一部都可以没有
而awk的功能也远不止如此
入门实例:
- echo | awk '{var1="v1";var2="v2";var3="v3"; print var1,var2,var3;}'
- 打印: v1 v2 v3
解释:逗号为定界符(分隔符)
- echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}'
打印v1-v2-v3
解释:双引号为连接符
其他任何符号,都不能正常输出v1,v2,v3
解读--help(一个非常庞大复杂的帮助文档,官方用了410页的篇幅PDF来介绍,如果我只言片语,你信我自己都不信。。)
用法: awk [POSIX 或 GNU 风格选项] -f 脚本文件 [--] 文件 ...
用法: awk [POSIX 或 GNU 风格选项] [--] '程序' 文件 ...
POSIX 选项: GNU 长选项:
-f 脚本文件 --file=脚本文件
-F fs --field-separator=fs
指定输入文本分隔符,fs是一个字符串或者是一个正则表达式,
-v var=val --assign=var=val
将外部变量值付给var
-m[fr] val
-O --optimize
启用一些优化程序的内部表示。
-W compat --compat
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft --copyleft
打印简短的版权信息
-W copyright --copyright
打印短版的通用公共许可证,然后退出
-W dump-variables[=file] --dump-variables[=file]
打印全局变量,其类型,提交的最终值的排序列表。
-W exec=file --exec=file
与-f类似,但与他有两点不同,(我回头把相关文档上传,太长)
-W gen-po --gen-po
(内容太多)
-W help --help 打印帮助
-W lint[=fatal] --lint[=fatal]
警告可疑或不移植到其他的awk实现的结构
-W lint-old --lint-old
打印关于不能向传统unix平台移植的结构的警告
-W non-decimal-data --non-decimal-data
启用自动输入数据的解释,八进制和十六进制值
-W profile[=file] --profile[=file]
启用awk程序剖析
-W posix --posix
在严格意义上的POSIX模式运作。
-W re-interval --re-interval
允许间隔表达式在正则表达式上
-W source=program-text --source=program-text
-W traditional --traditional
传统的Unix awk的正则表达式匹配
-W usage --usage
-W use-lc-numeric --use-lc-numeric
解析数字输入时,强制使用的语言环境中的小数点字符
数据
-W version --version
提交错误报告请参考“gawk.info”中的“Bugs”页,它位于打印版本中的“Reporting
Problems and Bugs”一节
注意:gawk是awk的GNU版本,即使help ,在ubuntu下也需要先安装gawk
这回我们就不解读了,为了增加大家的信息和乐趣,先来点基本的:
部分特殊变量:
NR: 表示记录数量,在执行过程中对应于行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0: 这个变量包含执行过程中当前行的文本内容
$1: 第一个字段的文本内容
$2: 第二个字段的文本内容
例子:
例1.
- 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
- }'
小注一下:$1是打印第一个,$NF打印最后一个字段,$(NF-1)打印倒数第二个
例2.
- seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}'
这个例子用到了基本格式。
BEGIN中 初始化了sum,打印Summation
中间模块打印了第一列,然后给sum+1
END中打印了sum
例3. 关于-v 外部变量
- $ VAR=10000
- $echo | awk –v VARIABLE=$VAR'{print VARABLE}'
还有另一种灵活的方法可以将多个外部变量传递给awk,例如:
- $var1="value1" var2="value2"
- $echo | awk '{print v1,v2}' v1=$var1 v2=$var2
如果来自文件
- awk '{print v1,v2}' v1=$var1 v2=$var2 filename
例4
$awk 'NR < 5' #行号小于5
$awk 'NR==1,NR==4' #行号在1到5之间的行
$awk '/linux/' #包含样式linux的行(可以用正则表达式指定样式)
$awk '!/linux/' #不包含样式linux的行
AWK用法整理的更多相关文章
- grep,sed,awk用法整理
grep -c 打印出符合要求的行数 -i 忽略大小写 ignore -n 连同符号一起输出 num -v 打印出不符合要求的行 -A2 本行及下面两行 - ...
- 收集整理的awk用法小结
awk 用法:awk ‘ pattern {action} ‘ 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...
- CU社区shell板块awk十三问整理
CU社区shell板块awk十三问整理 一.RS="" 当 RS="" 时,会将\n强制加入到FS变量中,因为RS为空时,是将连续多空行作为分隔符,近似于\n\ ...
- linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理
指令:let.expr.array.convert.tput.date.read.md5.ln.apt.系统信息 一:特殊符号用法整理 系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $ ...
- awk 用法(使用入门)
转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命 ...
- awk用法小结(作者总结)
http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...
- Spring JdbcTemplate用法整理
Spring JdbcTemplate用法整理: xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- sed和awk用法
sed和awk用法 Sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为 ...
- linq用法整理
linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...
随机推荐
- bzoj 3277 串 && bzoj 3473 字符串 && bzoj 2780 [Spoj]8093 Sevenk Love Oimaster——广义后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3277 https://www.lydsy.com/JudgeOnline/problem.p ...
- JSOI2008——星球大战
题目:https://www.luogu.org/problemnew/show/1197 并查集. 难点是若依次去掉点在求连通块个数,时间太长. 精妙的思维:先全部读入,再逆向求连通块个数——增加点 ...
- Scrapy下xpath基本的使用方法
Scrapy是基于python的开源爬虫框架,使用起来也比较方便.具体的官网档:http://doc.scrapy.org/en/latest/ 之前以为了解python就可以直接爬网站了,原来还要了 ...
- gcc gdb调试 & 命令行带参 (一) ******
用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软 ...
- C++将整型数据转换成大端或小端存储顺序
大端和小端的概念参考之前博客: 大端/小端,高字节/低字节,高地址/低地址,移位运算 昨晚帮导师从指令中恢复图像的时候,导师要我转换成raw格式,也就是记录图像像素的二进制序列,然后反复强调让我注意大 ...
- ALGO-2_蓝桥杯_算法训练_最大最小公倍数
问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 样例输出 数据规模与约 ...
- 开发框架-APP:Hybird App
ylbtech-开发框架-APP:Hybird App Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体 ...
- 【转载】Vmware Vconverter从物理机迁移系统到虚拟机P2V
本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称 P2V .采用的工具是VMware公司的 VMware vcenter vconverter standalone ...
- Redis等缓存数据库为什么访问会比较快?
首先,我们知道,mysql是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc).首先,用户访问mc,如果未命 ...
- 向Nexus仓库推送/使用各种组件
1.Nuget仓库 使用NuGetPackageExplorer打包制作自己的nupkg https://github.com/NuGetPackageExplorer/NuGetPackageExp ...