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

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

我需要删除第 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 ) )相同,包括标题

相关内容