我有一个表格文件,该表格文件由表格数据和在工作流程中必须保留的标头组成,这使一切变得复杂。我想知道是否有某种方法可以省略文件中的第n行,而使用awk
(例如,用于列过滤)并将其再次添加到最终输出中。
一种可能的解决方案(但我认为有点复杂)是创建带有标头的临时文件,执行awk 'NR>10 {command}'
,然后再次添加标头...如下所示:
head -10 file > header_tmp.txt
awk 'NR>10 {$5 ~ /\//; print}' file | cat header_tmp.txt - > final_file
也许还有另一个更棘手的解决方案?
答案 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满足/\//
的所有其他行