省略 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 满足 /\//
的所有其他行
我有一个由表格数据和一个 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 满足 /\//