【问题标题】:print all maximum values using awk使用 awk 打印所有最大值
【发布时间】:2022-11-16 00:17:22
【问题描述】:

我正在尝试打印所有最大值

所以,如果文字看起来像

  • name1 job1 9500
  • name2 job2 9500
  • 名称 3 工作 3 4500

我想像这样打印

  • 工作1 9500
  • 工作2 9500

到目前为止,我的代码是

'''

     BEGIN {a=0}

     {if ($3> a)
     max=$3;
     output=$2
        }

  END{
    print "job: ", output, "sal:", max}

'''

【问题讨论】:

  • 要求其他人阅读代码以帮助您时,请清楚地格式化您的代码。如果您不知道该怎么做,请在上面运行gawk -o-
  • 请更新问题以包括您的代码生成的(错误的)输出;还可以考虑详细检查您的代码...1) 看起来您正在使用 2 个不同的变量(amax)跟踪最大值...2) print 命令正在生成不同的东西(每行 4 个标记)你所说的应该在预期的输出中(每行 2 个标记)
  • 输入是否已按降序排列在第 3 列(如示例输入中所示)?

标签: linux awk max


【解决方案1】:

一种方法可能是跟踪最大数字,如果您有一个更高的数字,则存储该数字。

如果它与当前数字相同,则在数组中跟踪这些行(字段 2 和字段 3),并在最后打印它们。

awk '
{
  if ($3 > max) {
    max = $3
    i = 0;
    lines[++i] = $2 OFS $3
    next;
    }
  if ($3 == max) lines[++i] = $2 OFS $3
}
END {
  for (j=1;j<=i; j++) print lines[j]
}' file

输出

job1 9500
job2 9500

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2021-06-28
    • 2018-06-05
    相关资源
    最近更新 更多