2011-01-26 84 views
2

有什么方法可以改变FNR的默认值,然后将其输出到屏幕上。在awk中设置FNR值

我曾尝试:

(piped output....) | awk '{FNR=0} {print $0, FNR}' 

我希望的解决方案将是interhangeable与NR。

+0

你是什么意思的默认值? `FNR`是当前输入记录的编号,因此每个记录都会改变。 – 2011-01-26 12:00:50

+0

我相信你可以设置FNR为任何数字,所以你可以从0或2开始,然后从那里增加。 – Kay 2011-01-26 12:03:04

+0

记录号不是基于0的,而是基于1的。 FNR == 1是第一行 – 2011-01-26 12:03:43

回答

2

是,通过BEGIN

$ awk 'BEGIN {FNR=2} {print $0, FNR}' file.txt 
one 3 
two 4 
three 5 
four 6 

然而,这似乎不是当输入不stdin工作(即一个文件指定参数;在GNU AWK至少不是)。

2

为什么不声明自己offset变量:

(piped output....) | awk 'BEGIN {offset=2} {print $0, FNR+offset}' 
0
$ awk 'FNR > 2 {print $0, FNR}' yourfilename 

FNR不一定与NR互换。如果您指定了多个文件,FNR会在每个文件之前重新初始化为零。 NR没有。

1

正确的答案是:不要这样做!让FNR独自一人,就是这样。如果您需要一些计数器来表示除当前文件中迄今为止读取的记录数以外的其他计数器,那么只需创建一个计数器来表示该计数器,请勿混淆内置变量的含义。