本文共 789 字,大约阅读时间需要 2 分钟。
AWK中的NR和FNR参数解析
在AWK脚本中,NR和FNR是两个非常重要的参数,它们在数据处理中起着关键作用。NR表示当前输入行的行号,而FNR表示当前文件内的行号。通过理解这两个参数的区别,我们可以更好地处理多文件输入数据。
NR和FNR的基本区别
NR(行号)和FNR(当前文件行号)看似相似,但在处理多文件输入时表现不同。NR是全局行号,随着每一行输入递增;而FNR则是针对当前文件的行号,当处理多个文件时,FNR会重新开始计数。
举例说明
通过以下命令可以更直观地理解NR和FNR的区别:
awk '{print NR"\t"$0}' a b 运行上述命令会输出以下结果:
1 a b c2 b c a3 c a b4 a a a5 b b b6 c c c7 a b c8 b c a9 c a b10 1 1 111 2 2 212 3 3 3
可以看到,NR随着每一行递增,而FNR则在处理完一个文件后重置。例如,在处理文件"a"时,NR从1开始,处理完后继续处理文件"b",NR继续递增。
文件合并示例
当需要将多个文件合并时,可以利用NR和FNR实现文件行号的对齐。以下AWK脚本可以实现这一点:
awk 'NR==FNR{a[NR]=$0}NR>FNR{a[FNR]=$0,print $0}' a b 运行上述命令会输出以下结果:
a b c a b cb c a b c ac a b c a ba a a 1 1 1b b b 2 2 2c c c 3 3 3
从结果可以看出,合并后的文件中,数据按原始文件的行号对齐,NR和FNR的区别得以体现。
总结
通过理解NR和FNR的区别,我们可以更高效地处理多文件数据。在实际应用中,可以结合NR和FNR参数,实现文件的合并与数据的对齐。
转载地址:http://aejfk.baihongyu.com/