猿问

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

我正在学习文件比较awk。


我找到了如下的语法,


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

我无法理解这NR==FNR在什么意义?如果我尝试,FNR==NR那么我也得到相同的输出?


到底是做什么的?


摇曳的蔷薇
浏览 2168回答 3
3回答

九州编程

在awk中,FNR指的是当前文件中的记录号(通常是行号)并NR引用总记录号。运算符==是一个比较运算符,当两个周围的操作数相等时返回true。这意味着条件NR==FNR仅适用于第一个文件,因为FNR每个文件的第一行重置为1,但NR会继续增加。此模式通常用于仅对第一个文件执行操作。在next块内是指任何进一步的命令被跳过,所以它们仅在比所述第一其他文件运行。该条件FNR==NR比较了相同的两个操作数NR==FNR,因此它的行为方式相同。

子衿沉夜

在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
随时随地看视频慕课网APP
我要回答