在awk中省略第n行,但将其保留在输出中

时间:2018-10-22 11:49:02

标签: bash awk tabular

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

一种可能的解决方案(但我认为有点复杂)是创建带有标头的临时文件,执行awk 'NR>10 {command}',然后再次添加标头...如下所示:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

示例:我想保留前三行,为其他行求和。

输入:

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)&&($5 ~ /\//)' file

将打印前十行以及$ 5满足/\//的所有其他行