使用awk从文件中删除第一行和最后一行最简单的方法是什么?

使用awk从文件中删除第一行和最后一行最简单的方法是什么?,awk,Awk,我在学awk/呆呆的。所以最近我只是想用它来解决任何问题,以获得更多的练习机会 我的同事昨天问了一个问题 “如何从文件中删除第一行和最后一行” 。我知道sed'1d$d'文件可以工作。此外,即使性能不佳,头/尾也同样有效。我告诉他,他很高兴 后来,我试图写一篇awk一行:到目前为止,我得到的是: awk 'NR>1{a[++k]=$0}END{for(i=1;i<k;i++)print a[i]}' awk'NR>1{a[++k]=$0}END{for(i=1;i这样做的技巧: a

我在学awk/呆呆的。所以最近我只是想用它来解决任何问题,以获得更多的练习机会

我的同事昨天问了一个问题

“如何从文件中删除第一行和最后一行”

。我知道
sed'1d$d'文件
可以工作。此外,即使性能不佳,头/尾也同样有效。我告诉他,他很高兴

后来,我试图写一篇awk一行:到目前为止,我得到的是:

awk 'NR>1{a[++k]=$0}END{for(i=1;i<k;i++)print a[i]}'
awk'NR>1{a[++k]=$0}END{for(i=1;i这样做的技巧:

awk 'NR>2 {print last} {last=$0}'

awk
仅当NR>2(即除前2行外的所有行)时执行操作
print last
。在所有行上,它将变量
last
设置为当前行。因此当
awk
读取第三行时,它打印第2行(存储在
last
中)。当它读取最后一行(第n行)时它打印第n-1行的内容。其净效果是打印第2行到第n-1行。

让我建议另一种解决方案。 如果您需要为顶行和底行自定义N,您可以使用尾行头行命令:

awk '{print $1}'  | head -n -1 | tail -n+2
头-n-1删除最后一行

尾部-n+2-从第二行开始输出(删除1行)

以下命令将从顶部和底部删除3行:

awk '{print $1}'  | head -n -3 | tail -n +4
实际上,我们这里甚至不需要awk:

more | head -n -1 | tail -n +2


感谢您的评论!

这里是另一种方式,但它需要gawk函数长度:

awk '{firstline=2; cuttail=1; l[NR]=$0} END {for (i=firstline; i<=length(l)-cuttail; i++) print l[i]}'

awk'{firstline=2;cuttail=1;l[NR]=0}END{for(i=firstline;iYES!!!我也想过这种方法,但给出了
NR>1
。然后放弃了…urrrr。根本没有想到NR>2,太蠢了!太好了!谢谢!起来!在读取多个文件时使用
FNR
。我喜欢这个解决方案,但现在awk是多余的。你只需要做
更多的文件名。|他说ad-n-1 |尾部-n+2
awk '{firstline=2; cuttail=1; l[NR]=$0} END {for (i=firstline; i<=length(l)-cuttail; i++) print l[i]}'