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 awk 内置变量实例

linux awk命令详解

linux shell awk 流程控制语句(if,for,while,do)详细介绍

AWK的NR和FNR详解(例子1)

awk应用(例2)

awk解决实际问题例子的更多相关文章

  1. 探索Windows命令行系列(6):活用批处理解决实际问题

    1.批量修改文件名 2.批量重启服务 3.全盘搜索指定文件 3.1.全盘搜索名称为 mm.jpg 的文件,获取其全路径 3.2.查找系统中所有名称以 .docx 结尾的文件 4.调用可执行程序 4.1 ...

  2. awk 循环语句例子

    awk 循环语句例子 运行结果:

  3. 运用《深入理解Java虚拟机》书中知识解决实际问题

    前言 以前看别人博客说看完<深入理解Java虚拟机>这本书并没有让自己的编程水平提高多少,不过却大大提高了自己的装逼水平.其实,我倒不这么认为,至少在我看完一遍这本书后,有一种醍醐灌顶的感 ...

  4. iOS正则表达式解决实际问题

    问题:上海市徐汇区桂林路158号1202室 字符串长度不固定,数字长度也不固定.截取第二组数字. 方法一:[正则表达式] NSString * str = @"上海市徐汇区桂林路158号12 ...

  5. 【maven】排除maven中jar包依赖的解决过程 例子:spring cloud启动zipkin,报错maven依赖jar包冲突 Class path contains multiple SLF4J bindings.

    一直对于maven中解决jar包依赖问题的解决方法纠结不清: 下面这个例子可以说明一个很简单的解决方法: 项目启动报错: Connected to the target VM, address: '1 ...

  6. 项目中解决实际问题的代码片段-javascript方法,Vue方法(长期更新)

    总结项目用到的一些处理方法,用来解决数据处理的一些实际问题,所有方法都可以放在一个公共工具方法里面,实现不限ES5,ES6还有些Vue处理的方法. 都是项目中来的,有代码跟图片展示,长期更新. 1.获 ...

  7. C语言复习笔记-17种小算法-解决实际问题

    判断日期为一年中的第几天(考虑闰年) 1 /* 2 * 计算该日在本年中是第几天,注意闰年问题 3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 4 * 特殊情况,闰年且 ...

  8. [转贴]C语言复习笔记-17种小算法-解决实际问题

    判断日期为一年中的第几天(考虑闰年) /* * 计算该日在本年中是第几天,注意闰年问题 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 * 特殊情况,闰年且输入月份大于3时 ...

  9. 【原创】CMD常用命令:解决实际问题

    1.查找某一目录下后缀名文某某的所有文件. 命令格式:dir *.mp3 /a -d/b/s >C:\Users\leemo\Desktop\total.txt MP3为文件后缀名.>是命 ...

随机推荐

  1. linux常用基本命令整理小结

    linux系统遵循的基本原则 由目标单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 尽量避免捕捉用户接口: 配置文件保存为纯文本文件: Linux命令行常识 命令格式 命令+选项+参数 选项 ...

  2. Error:C:\Users\issuser\AndroidStudioProjects\SQLiteDemo1\.gradle\buildOutputCleanup\cache.properties (系统找不到指定的文件。)

    android studio报下图中的这个错误的解决办法: 解决办法: 1.删除掉下图中标记的2个文件夹 2.将下图标记的文件的文件名重命名,把最后的后缀.lock去掉,因为加上了这个后缀,所以提示找 ...

  3. js 跨域问题 汇总

    前言 相信每一个前端er对于跨域这两个字都不会陌生,在实际项目中应用也是比较多的.但跨域方法的多种多样实在让人目不暇接.老规矩,碰到这种情况,就只能自己总结一篇博客,作为记录. 正文 1. 什么是跨域 ...

  4. 系统启动时,dts怎么被加载的?

    转:http://blog.csdn.net/lichengtongxiazai/article/details/38941913 此文章针对高通msm8953平台,启动过程中,bootloader( ...

  5. mmap函数实现

    转自:https://www.cnblogs.com/huxiao-tee/p/4660352.htmlmmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址 ...

  6. 关于在selenium 中 webdriver 截图操作

    package prictce; import java.io.File; import java.io.IOException; import org.junit.After; import org ...

  7. 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 ...

  8. deeplearning.ai 人工智能行业大师访谈 Geoffrey Hinton 听课笔记

    1. 怀揣着对大脑如何存储记忆的好奇,Hinton本科最开始学习生物学和物理学,然后放弃,转而学习哲学:然后觉得哲学也不靠谱,转而学习心理学:然后觉得心理学在解释大脑运作方面也不给力,转而做了一段时间 ...

  9. 【一小时入门】webpack 入门指南

    什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...

  10. 学习笔记-使用cmd命令行创建nodejs项目

    使用cmd命令行创建nodejs项目 1)在DOS下cd 进入到你想要创建项目的路径. 2)mkdir sing (创建一个sing文件夹) 3)cd sing  4) npm init (初始化工程 ...