【问题标题】:Linux sorting and cut rows except maximum valuesLinux 排序和剪切除最大值之外的行
【发布时间】:2015-01-03 11:54:03
【问题描述】:

我有一个问题控制 txt 文件。

一个文件包含 4 列,如果我想剪切除列中的最大值之外的行

1.Check First Column Name
2.Check Last Column Values.
3.Remove depends on First Column and Last Column.

Test1    500     400    200
Test1    499     400    200
Test1    499     399    200 
Test1    498     100    100
Test2    600     200    150
Test2    600     199    150
Test2    599     199    100

我想删除没有名称顶行的行 例如如下 姓名分数长度

Test1    500   400  200
Test1    499   400  200
Test1    499   399  200 
Test2    600   200  150
Test2    600   199  150

任何人有一个好主意来解决这个问题? awk 或 Sed ..

感谢您提供的任何信息!

ubuntu awk sed

【问题讨论】:

  • 文件中是否有以1.2.3. 开头的行?如果不是,请重新格式化问题。
  • awk 中,将每一行保存到一个数组中。同时,创建一个关联数组,其中包含每个名称的最大值。然后在END 块中,遍历保存的线数组,如果它与名称的最大值匹配,则打印它。
  • 你的问题我不清楚,列中的最大值??请解释一下??
  • 很抱歉让我感到困惑,但 Barmar 明白我的意思,非常感谢!

标签: linux awk sed


【解决方案1】:

这基于 glenn jackman 的回答,但根据我对问题的阅读正确测试了列。数组max 包含第 1 列中每个名称的第 4 列最大值。在第二遍中,我们测试该列是否与最大值匹配。

awk '
    NR == FNR {
        if ($4 > max[$1]) max[$1] = $4
        next
    }
    $4 == max[$1]
' control.txt control.txt

【讨论】:

  • 非常感谢你明白我的意思感谢@glenn jackman
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2019-08-16
相关资源
最近更新 更多