我正在学习文件比较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
,因此它的行为方式相同。
子衿沉夜
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
- 3 回答
- 0 关注
- 2167 浏览
添加回答
举报
0/150
提交
取消