awk解决实际问题例子
awk很有用,就不说了,下面记录几个我遇到的例子,汇总
1 获得linux环境变量(ENVIRON)
awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd
结果: /home/homer/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
注: ENVIRON是子典型数组,可以通过对应键值获得它的值,linux 环境变量还有$HOME,$PWD等,可以通过linux 命令 env 查看
2 外部环境变量
awk 'BEGIN{for (i in ENVIRON) {print i"="ENVIRON[i];}}'
结果:
HLVL=1
PWD=/home/homer
JAVA_HOME=/home/homer/eclipse/jdk1.7.0_05
SHELL=/bin/bash
PATH=/home/homer/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
..........
注: ENVIRON是子典型数组,可以通过对应键值获得它的值,linux 环境变量还有$HOME,$PWD等,可以通过linux 命令 env 查看
例1 关于NR和FNR的典型应用(转载):
现在有两个文件格式如下:
#cat account
张三|000001
李四|000002
#cat cdr
000001|10
000001|20
000002|30
000002|15
想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:
张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15
执行如下代码
#awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr
注释:
1 由NR=FNR为真时,判断当前读入的是第一个文件account,然后使用{a[$2]=$0;next}循环将account文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.
脚本里面的next是指读入下一个输入行,并返回脚本的顶部,即awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}',每次都执行到next然后循环执行绿色部分,红色的都不执行。这部分实际的赋值结果是
root.~:awk -F \| 'NR==FNR{a[$2]=$0; print "a("$2")=" ,a[$2];next}' account
a(000001)= 张三|000001
a(000002)= 李四|000002
2 由NR=FNR为假时,判断当前读入了第二个文件cdr,然后跳过{a[$2]=$0;next},对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},此时变量$1为第二个文件的第一个字段(即 000001 000002),使用a[$1]引用了步骤1得出的数组,然后随着$1的变化,输出完整的数组
root.~:awk -F \| 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' account cdr
张三|000001|10
张三|000001|20
李四|000002|30
李四|000002|15
例2 awk 判断 (也可循环,此不表)
首先说下,功能是把a中TIME和b中的TIME相同的OUT_FLOW值加在file1中,并且多加一列,该列值为1(当OUT_FLOW在UP和LOW之间)或0(当OUT_FLOW不在UP和LOW之间) ,a、b中Time不同的不用显示
cat b:
Time Name C_name Up Low
1 dns1 godedy 5 1
2 dns2 dnspod 5 3
3 dns3 na 8 2
5 dns4 cnnc 4 2
cat a:
Time C_name Out_flow
1 dnspod 3
2 godedy 6
3 cnnc 3
4 cnnc 4
root.~:awk 'NR==FNR{Time[$1]=$3} NR>FNR{if (Time[$1]) print $0, Time[$1] }' a b |awk '{if ($6>$5&&$6<$4) print $0,0 ;else print $0,"1"}' >file1
Time Name C_name Up Low Out_flow 0
1 dns1 godedy 5 1 3 0
2 dns2 dnspod 5 3 6 1
3 dns3 na 8 2 3 0
注释:
1 当NR==FNR为真时,执行Time[$1]=$3,依次把a中time的值放入数组Time[$1]=中,此时处理的是文件a
2 当NR>FNR为真时,此时处理的文件是b,执行if (Time[$1]) print $0, Time[$1],这里的if是为了去除存在于b而不存在于a中的Time,此命令把a、b文件Time相同的合并起来,以便下部处理
3 |管道符后面的语句,awk '{if ($6>$5&&$6<$4) print $0,0 ;else print $0,"1"}',判断Out_flow是否介于Low和Up之间,是则为1,否则为0,并打印输出
4 >file1,将结果重定向到文件file1中
参考:
linux shell awk 流程控制语句(if,for,while,do)详细介绍
awk解决实际问题例子的更多相关文章
- 探索Windows命令行系列(6):活用批处理解决实际问题
1.批量修改文件名 2.批量重启服务 3.全盘搜索指定文件 3.1.全盘搜索名称为 mm.jpg 的文件,获取其全路径 3.2.查找系统中所有名称以 .docx 结尾的文件 4.调用可执行程序 4.1 ...
- awk 循环语句例子
awk 循环语句例子 运行结果:
- 运用《深入理解Java虚拟机》书中知识解决实际问题
前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...
- iOS正则表达式解决实际问题
问题:上海市徐汇区桂林路158号1202室 字符串长度不固定,数字长度也不固定.截取第二组数字. 方法一:[正则表达式] NSString * str = @"上海市徐汇区桂林路158号12 ...
- 【maven】排除maven中jar包依赖的解决过程 例子:spring cloud启动zipkin,报错maven依赖jar包冲突 Class path contains multiple SLF4J bindings.
一直对于maven中解决jar包依赖问题的解决方法纠结不清: 下面这个例子可以说明一个很简单的解决方法: 项目启动报错: Connected to the target VM, address: '1 ...
- 项目中解决实际问题的代码片段-javascript方法,Vue方法(长期更新)
总结项目用到的一些处理方法,用来解决数据处理的一些实际问题,所有方法都可以放在一个公共工具方法里面,实现不限ES5,ES6还有些Vue处理的方法. 都是项目中来的,有代码跟图片展示,长期更新. 1.获 ...
- C语言复习笔记-17种小算法-解决实际问题
判断日期为一年中的第几天(考虑闰年) 1 /* 2 * 计算该日在本年中是第几天,注意闰年问题 3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 4 * 特殊情况,闰年且 ...
- [转贴]C语言复习笔记-17种小算法-解决实际问题
判断日期为一年中的第几天(考虑闰年) /* * 计算该日在本年中是第几天,注意闰年问题 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 * 特殊情况,闰年且输入月份大于3时 ...
- 【原创】CMD常用命令:解决实际问题
1.查找某一目录下后缀名文某某的所有文件. 命令格式:dir *.mp3 /a -d/b/s >C:\Users\leemo\Desktop\total.txt MP3为文件后缀名.>是命 ...
随机推荐
- linux常用基本命令整理小结
linux系统遵循的基本原则 由目标单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 尽量避免捕捉用户接口: 配置文件保存为纯文本文件: Linux命令行常识 命令格式 命令+选项+参数 选项 ...
- Error:C:\Users\issuser\AndroidStudioProjects\SQLiteDemo1\.gradle\buildOutputCleanup\cache.properties (系统找不到指定的文件。)
android studio报下图中的这个错误的解决办法: 解决办法: 1.删除掉下图中标记的2个文件夹 2.将下图标记的文件的文件名重命名,把最后的后缀.lock去掉,因为加上了这个后缀,所以提示找 ...
- js 跨域问题 汇总
前言 相信每一个前端er对于跨域这两个字都不会陌生,在实际项目中应用也是比较多的.但跨域方法的多种多样实在让人目不暇接.老规矩,碰到这种情况,就只能自己总结一篇博客,作为记录. 正文 1. 什么是跨域 ...
- 系统启动时,dts怎么被加载的?
转:http://blog.csdn.net/lichengtongxiazai/article/details/38941913 此文章针对高通msm8953平台,启动过程中,bootloader( ...
- mmap函数实现
转自:https://www.cnblogs.com/huxiao-tee/p/4660352.htmlmmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址 ...
- 关于在selenium 中 webdriver 截图操作
package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org ...
- LVS集群DR模式实例(4)
LVS集群DR模式实例 1. 实验拓扑图 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20 VIP eth0:0 10.20.73.3 ...
- deeplearning.ai 人工智能行业大师访谈 Geoffrey Hinton 听课笔记
1. 怀揣着对大脑如何存储记忆的好奇,Hinton本科最开始学习生物学和物理学,然后放弃,转而学习哲学:然后觉得哲学也不靠谱,转而学习心理学:然后觉得心理学在解释大脑运作方面也不给力,转而做了一段时间 ...
- 【一小时入门】webpack 入门指南
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- 学习笔记-使用cmd命令行创建nodejs项目
使用cmd命令行创建nodejs项目 1)在DOS下cd 进入到你想要创建项目的路径. 2)mkdir sing (创建一个sing文件夹) 3)cd sing 4) npm init (初始化工程 ...