awk中 NR 和 NF到底是啥意思? 能举例说明吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk中 NR 和 NF到底是啥意思? 能举例说明吗?相关的知识,希望对你有一定的参考价值。

if NR==FNR 这个又是什么意思

NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任意连续的多个空白符)

(NR==FNR) 大致等效于 (ARGIND==1) , 一般用来判断是不是在处理第一个文件。
但区别是: 前者是判断当前处理的总行数跟文件内行数相等,而这种情况一般都是在第一个文件上,而ARGIND==1是参数位置第1的文件时生效。—— 但,如果前面的文件是空的,那么NR==FNR就生效于第一个非空文件,而ARGIND==1不会。这微妙的区别使它们可以应用于不同的需要。
实际使用中还可以用文件名判断当前处理的是哪一个文件。
上面几种使用的环境: 用awk连续处理多个文件时,比如 awk '命令序列' file1 file2 file* 这样的情况下,判断在处理哪个文件了。
参考技术A 比如现在AWK处理到第五行。第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4

NR==FNR 表示从起始行到当前行,awk都进行了操作,比如修改,添加等等

简单来说,NR就是当前读取多少行,FNR就是当前修改了多少行,FNR<=NR本回答被提问者采纳

以上是关于awk中 NR 和 NF到底是啥意思? 能举例说明吗?的主要内容,如果未能解决你的问题,请参考以下文章

NF$NFFRFNR举例说明

awk命令详解

awk常用选项举例

awk使用的一点体会

awk:NF-NR-OFS-ORS-RS等参数

Linux的文本处理工具浅谈-awk sed grep