2012-10-04 39 views
0

我很新使用AWK。我只是发现了FNR变量。我只是想知道在处理文件之前是否有可能获得之前的总记录数? 所以FNR在文件末尾。总记录数

我只是需要做这样的

awk 'FNR<TOTALRECORDS-4 {print}' 

东西为了删除文件的最后4行。 感谢

回答

1

如果你只是想打印所有,但最后4行的文件中,使用不同的工具。但是,如果您正在使用awk进行其他一些处理,并且需要合并这些处理,只需将行存储在缓冲区中并根据需要进行打印。也就是说,存储最近的4行,并在得到换行符时将最后一行打印在缓冲区中。例如:

awk 'NR>4 { print a[i%4]} {a[i++%4]=$0}' input 

这会在数组中保留4行a。如果我们位于文件的前4行,则不要执行任何操作,而是将行存储在a中。如果我们的行数大于4,那么你要做的第一件事是打印返回的4行(存储在a的索引i%4)。可以根据需要在这两个行为语句之间放置操作$0的命令。

+0

for i in \'seq 116 \';做echo $ i;完成| awk'{a [i ++%4] = $ 0} END {for(i = 0; i

+0

打印[0] -a [ 3]在END中是如果总行数不是4的倍数,它会改变顺序。 –

1

要删除一个文件的最后4行,你可以使用head

head -n -4 somefile > outputfile