为了账号安全,请及时绑定邮箱和手机立即绑定

什么是awk中的“NR == FNR”?

什么是awk中的“NR == FNR”?

摇曳的蔷薇 2019-09-02 08:55:57
我正在学习文件比较awk。我找到了如下的语法,awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2我无法理解这NR==FNR在什么意义?如果我尝试,FNR==NR那么我也得到相同的输出?到底是做什么的?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

在awk中,FNR指的是当前文件中的记录号(通常是行号)并NR引用总记录号。运算符==是一个比较运算符,当两个周围的操作数相等时返回true。

这意味着条件NR==FNR仅适用于第一个文件,因为FNR每个文件的第一行重置为1,但NR会继续增加。

此模式通常用于仅对第一个文件执行操作。在next块内是指任何进一步的命令被跳过,所以它们仅在比所述第一其他文件运行。

该条件FNR==NR比较了相同的两个操作数NR==FNR,因此它的行为方式相同。


查看完整回答
反对 回复 2019-09-02
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

在file2中查找也在file1中的键(第一行)。

第1步:使用文件1的第一个单词填充数组a:


awk '{a[$1];}' file1

步骤2:在同一命令中填充数组a并忽略文件2。为此,使用当前输入文件的编号检查到目前为止的记录总数。


awk 'NR==FNR{a[$1]}' file1 file2

步骤3:忽略}解析文件1时可能出现的操作


awk 'NR==FNR{a[$1];next}' file1 file2 

步骤4:在数组a中找到file2的打印键


awk 'NR==FNR{a[$1];next} $1 in a{print $1}' file1 file2


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 2167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信