awk中的NR FNR
shell编程中,awk简直就是一把利器,你能够把它看成shell的一部分,也能够看成一种单独的语言,功能十分强大。今天先来说一说NR与FNR
先准备两个文件:
1.txt,内容为:
user password
wolf 123456
zys 123
2.txt 内容为:
id user
0001 wolf
0002 xiaozhai
事实上在处理单个文件时,NR与FNR都一样。表示当前读取的行号,如运行awk '{print NR}' 1.txt 和运行 awk '{print FNR}' 1.txt,结果都一样,均为
1
2
3
可是当处理两个文件时,awk先读取第一个文件。此时NR与FNR相等。可是当读取第二个文件时,FNR从新開始计数,而NR继续增长。此时就不相等了。
运行awk '{print NR"\t"FNR}' 1.txt 2,txt 结果例如以下:
1 1
2 2
3 3
4 1
5 2
6 3
借助这个特性,结合awk的循环和数组。awk很适合处理查找两个文件里有同样记录域的关联信息,如查找存在于1.txt中的用户。且此用户也存在于2.txt中的password。最后打印username和相应的password, awk 'NR==FNR{a[$1]=$2;next} {if(a[$2]){print $2"\t"a[$2];}}' 1.txt 2.txt ,注意一定要用单引號。结果为:
user passwd
wolf 123456
解释一下这个命令:当NR==FNR时。即读取第一个文件的时候,先用循环把1.txt中的信息存到数组a中;当NR不等于FNR时,即读取第二个文件的时候。此时$2相应与2.txt中user列。若数组a中有相应与当前行user的记录。则打印user(即$2)和passwd(即a[$2])。
awk的功能由此可见真是非常强大。
最新文章
- 【工业串口和网络软件通讯平台(SuperIO)教程】四.开发设备驱动
- 关于兼容性——百分比对于IE浏览器的影响
- c++ 操作符重载和友元
- angularjs指令(二)
- hhgis驱动
- 无责任共享 Coursera、Udacity 等课程视频
- ASP.net 中关于Session的存储信息及其它方式存储信息的讨论与总结
- 解决Ubuntu中phpmyadmin对数据上传上限2M
- 从零单排学Redis【铂金一】
- China Tightens Recycling Import Rules
- ie6常见的兼容性问题
- Nand_ECC_校验和纠错_详解
- activiti5/6 系列之--Activiti与BPMN2.0规范相关节点对应关系
- 第一篇、Python初识
- loadrunner 场景设计-负载生成器管理
- ajax用户名存在检测
- 【读书笔记】iOS-网络-运行循环
- IOS中键盘隐藏几种方式
- Hexo博客搭建全解
- Delphi APP 開發入門(五)GPS 定位功能