省略 awk 中的第 n 行,但将它们保留在输出中

Omit nth first lines in awk but keep them in output

我有一个由表格数据和一个 header 组成的表格文件,我必须在我的工作流程中保留它——这让一切都变得复杂了。我想知道是否有某种方法可以省略文件中的第 n 行,使用 awk(例如,用于列过滤)并在最终输出中再次添加它们。

一个可能的解决方案(但我认为有点复杂)是用 header 创建一个临时文件,执行 awk 'NR>10 {command}' 并在再次添加 header 之后.. . 像这样:

head -10 file > header_tmp.txt
awk 'NR>10 { ~ /\//; print}' file | cat header_tmp.txt - > final_file

也许还有另一个更棘手的解决方案?

使用 awk,您可以使用 NR 关键字并执行如下操作:

awk 'NR<50{print}NR>=50{<code for lines >=50>}'

awk 'NR<50{print;next;}{<codes for lines >=50>}'

示例:我想保留前 3 行,对其他行求和。

输入:

Hello World1
Hello World2
Hello World3
1;2;3;4
5;6;7;8

代码:

awk -F';' 'NR<4{print;next}{result=0;for(i=1;i<=NF;i++){result += $i}; print result}' test.txt

结果:

Hello World1
Hello World2
Hello World3
10
26

使用您提供的示例更容易:

awk -F\; 'NR<=10;(NR>10)&&( ~ /\//)' file

将打印前十行和 $5 满足 /\//

的所有其他行