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

Yishto 2021-08-20 21:46:59
Categories: Tags:
1
2
awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13

步骤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