使用awk跳过文本文件中的前6行/行


39

如何跳过文本文件(input.txt)中的前6行/行,并使用awk处理其余行?我的awk脚本(program.awk)的格式为:

BEGIN {
} 

{ 
process here
} 

END {

}

我的文本文件是这样的:

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

我想从以下位置处理文件:

0.3 3.3
1.5 2.1
.
.
.

Answers:


59

使用以下两种模式之一:

NR>6 { this_code_is_active }

或这个:

NR<=6 { next }
{ this_code_is_active }

如果您有许多文件作为awk的参数,并希望在每个文件中跳过6行,请使用FNR而不是NR。


29

尝试:

awk 'FNR > 6 { #process here }' file

4
好!但是您没有解释为什么这样做会更好-对于多个文件FNR,每个文件中的行号是整个文件中的行号,而NR在整个输入中是行号(在管道传输时不是问题)。
Tomasz Gandor

3

您也可以使用headtail程序跳过文件开头或结尾的任意行。

对于您的具体问题,

tail input.txt -n+7 | program.awk

只要您的program.awk文件是可执行文件,就可以。否则,您可以使用

tail input.txt -n+7 | awk -f program.awk

这样,您就可以为每行保留一个比较,而无需更改AWK代码的逻辑。

tail 将从第7行开始流式传输文本,跳过第6行。

这在性能上不会有什么大不了的,特别是如果文本处理由于缓存而简单的话。但是,对于长文件和在云环境中重复使用,可以节省一些成本。


正确,但根据经验,当您仅需使用一种工具即可轻松进行配管时,应避免配管。想想通过两个命令传递的巨大文本文件,只是删除了几行。
Philippos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.