我需要删除第 8 个字段(列)中值为 2 或更少的每一行。
我的数据如下所示:
12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8
01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1
01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4
01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6
我知道使用 awk 可以去掉所需的值并将它们打印到另一个文件,并且我知道 sed 会编辑当前文件。无论哪种情况,我都需要保留原始文件。
笔记:请提供您的解决方案的详细解释。只写命令是不够的,请注释建议。
进一步说明:数据有标题行,因此最有可能的解决方案需要
awk 'FNR >1'
我想?
答案1
你几乎明白了。
awk '(NR>1) && ($8 > 2 ) ' foo > bar
在哪里
NR
是记录数(即行数)$8
是八个字段&&
是合乎逻辑的并且foo
是原始文件,未更改bar
结果文件- 隐式默认操作是打印当前输入行
请注意,标题从 foo 到 bar 是条带状的,以保留它
awk '(NR==1) || ($8 > 2 ) ' foo > bar
在哪里
||
是逻辑或- 如果 NR==1 或 $8 > 2,则打印输入行
更新#1
指定范围
( ($8 >= -4) && ( $8 <= 4 ) )
第 8 个字段从 -4 到 4(NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) )
相同,包括标题