删除字段值小于或等于 3 的行 - sed 或 awk?

geo*_*ing 21 shell grep sed awk shell-script

我需要删除第 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
Run Code Online (Sandbox Code Playgroud)

我知道使用 awk 我可以剥离所需的值并将它们打印到另一个文件,我知道 sed 会编辑当前文件。无论哪种情况,我都需要保留原始文件。

注意:请对您的解决方案提供详尽的解释。仅写命令是不够的,请注释建议。

进一步注意:数据有一个标题行,所以最有可能的解决方案需要

awk 'FNR >1'

我想?

Arc*_*mar 25

你几乎明白了。

 awk '(NR>1) && ($8 > 2 ) ' foo > bar
Run Code Online (Sandbox Code Playgroud)

在哪里

  • NR 是记录数(即行数)
  • $8 是八场
  • && 是合乎逻辑的
  • foo 是原始文件,未更改
  • bar 结果文件
  • 隐式默认操作是打印当前输入行

请注意,header 是从 foo 到 bar 条带化的,以保留它

 awk '(NR==1) || ($8 > 2 ) ' foo > bar
Run Code Online (Sandbox Code Playgroud)

在哪里

  • || 是合乎逻辑的或
  • 如果 NR==1 或 $8 > 2,则打印输入行

更新 #1

指定范围

  • ( ($8 >= -4) && ( $8 <= 4 ) ) 从 -4 到 4 的第 8 场
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) 相同,包括标题