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的功能由此可见真是非常强大。

awk中的NR FNR的更多相关文章

  1. 关于awk中NR、FNR、NF、$NF、FS、OFS的说明

    一.NR和FNR 1.释义 NR: 表示当前读取的行数 FNR:当前修改了多少行 2.举例 比如现在AWK处理到第五行.第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4 NR= ...

  2. awk之NR==FNR问题

    NR,表示awk开始执行程序后所读取的数据行数. FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计. 下面看两个例子: 1,对于单个文件NR 和FNR 的 输出结果一样的 ...

  3. awk中NF,NR的含义

    awk中NF和NR的意义,其实你已经知道NF和NR的意义了,NF代表的是一个文本文件中一行(一条记录)中的字段个数,NR代表的是这个文本文件的行数(记录数).在编程时特别是在数据处理时经常用到.建议你 ...

  4. awk中引用shell变量执行替换的脚本

    遇到问题: 现在有两个脚本,我想 将file1中的内容按file2来匹配 [root@154 home]# cat file1 3-1-1 POTV=1,POTA=0,POTP=2 1-4-76 PO ...

  5. awk 中 FS的用法

    在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {pr ...

  6. 常用统计分析 SQL 在 AWK 中的实现(转)

    转自:http://my.oschina.net/leejun2005/blog/100710 最近有需求需要本地处理一些临时的数据,用做统计分析.如果单纯的 MYSQL 也能实现, 不过一堆临时数据 ...

  7. awk 中的难懂符号解释

    awk中NF和NR的意义,其实你已经知道NF和NR的意义了,NF代表的是一个文本文件中一行(一条记录)中的字段个数,NR代表的是这个文本文件的行数(记录数). 看个例子: cal 9 2003 Sep ...

  8. awk中next以及getline用法示例

    在awk中,如果调用next,那么next之后的命令就都不执行了.此行文本的处理到此结束,开始读取下一条记录并操作. 实例如下: [plain] view plain copy zoer@ubuntu ...

  9. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

随机推荐

  1. 使用SpringMVC参数传递时,解决get请求时中文乱码的问题

    问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一,  我们需要把request.getParameter(“参数名”)获取到的字符串先 ...

  2. [git 学习篇]远程创库

    实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交. 完全 ...

  3. 理解 PHP output buffer

    在需要使用输出缓存区的时候,一般会在代码中加上ob_start()这个函数. 这是因为php.ini中output_buffering设置为off时,则缓存区处于关闭状态,需要用ob_start()打 ...

  4. Nginx报 No input file specified. 的问题解决之路 转

    https://m.aliyun.com/yunqi/articles/34240 今天接手公司的一个项目,照例将项目clone下来,配置本地host,nginx,然后访问. 怎么回事?迅速在php的 ...

  5. 【Luogu】P3389高斯消元模板(矩阵高斯消元)

    题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...

  6. [暑假集训--数位dp]UESTC250 windy数

    windy定义了一种windy数. 不含前导零且相邻两个数字之差至少为22 的正整数被称为windy数. windy想知道,在AA 和BB 之间,包括AA 和BB ,总共有多少个windy数? Inp ...

  7. Bootstrap 模态框(Modal)插件数据传值

    原文:http://blog.csdn.net/baalhuo/article/details/51178154 模态框具体代码如下: <!-- 模态框(Modal) --> <di ...

  8. 容器 What, Why, How

    学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What.Why 和 How 这三个问题. What - 什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在 ...

  9. JVM指令详解(下)

    九.自增减指令 该指令用于对本地(局部)变量进行自增减操作.该指令第一参数为本地变量的编号,第二个参数为自增减的数量. 比如对于代码:                 int d=10; d++; d ...

  10. macOS(Sierra 10.12)上Android源码(AOSP)的下载、编译与导入到Android Studio

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...