跳转到主内容
思享编程网:思考分享,玩转编程世界!

awk中的NR、FNR、next怎么用?

大家好,我是陆砚码。今天我们来聊聊awk中的NR、FNR和next这三个小家伙。它们虽然不起眼,但在处理文本文件时可是大有用处哦!

NR和FNR

NR是啥?NR表示awk开始执行程序后所读取的数据行数。简单来说,就是已经处理过的行数。

FNR呢?FNR和NR长得差不多,但它们的作用可不一样。FNR是每次打开一个新文件时,行数从0开始重新累计的。也就是说,每次处理新文件,FNR都会重置为0。

示例1:文件合并

我们先来看一个例子,假设我们有两个文件file1和file2,我们要比较file1的1-4字符和file2的2-5字符,如果相同,就将file2的第二列和file1合并到file3中。

awk -F'[ a-zA-Z]' 'NR==FNR{a[$2]=$4;next}{print $0,a[$1]}' file2 file1

这里,我们首先设定域分隔符为空格或者是匹配a-zA-Z正则的一个字母。当NR==FNR,读取file2的时候构建一个数组,下标是第2个域,值是第4个域。然后遇到next命令,不再执行后面的语句,循环读取新的一行继续执行构建数组的命令,直到NR==FNR失败。

当NR==FNR为false的时候,读取file1,输出file1中的所有内容,再输出a[$1]。因为file1中$1的值和file2中$2的值是相同的,所以a[$1]等于我们前面设定的file中$2的值,最终得到上面的结果。

示例2:文件替换

再来看一个例子,假设我们有两个文件passwd和shadow,我们要用shadow文件中的密文部分替换passwd中的

相关文章