如何跳过文本文件 (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
.
.
.
答案1
使用两种模式之一:
NR>6 { this_code_is_active }
或这个:
NR<=6 { next }
{ this_code_is_active }
如果您有许多文件作为 awk 的参数并且想要在每个文件中跳过 6 行,请使用 FNR 而不是 NR。
答案2
尝试:
awk 'FNR > 6 { #process here }' file
答案3
head
您还可以使用或程序在文件的开头或结尾跳过任意数量的行tail
。
对于你的具体问题,
tail input.txt -n+7 | program.awk
就可以了,只要你的program.awk
文件是可执行的。否则,您可以使用
tail input.txt -n+7 | awk -f program.awk
这样,您就无需对每一行进行比较,并且无需更改 AWK 代码的逻辑。
tail
将从第七行开始流式传输文本,跳过前六行。
这对性能来说不会有太大影响,特别是如果文本处理由于缓存而很简单的话。然而,对于长文件和在云环境中重复使用可能会节省一些成本。
答案4
for pkg in $(pip list | awk 'FNR > 2 { print $1 }'); do pip install --upgrade $pkg; done