【问题标题】:awk - Print all lines containing the Max value found in the initial analysisawk - 打印包含在初始分析中找到的最大值的所有行
【发布时间】:2021-06-28 13:51:02
【问题描述】:

我有以下 AWK 命令。

(awk 'max=="" || $1 > max {max=$1; l=$0} END{ print l}' FS="|" $STAGE_FILE) < input.txt

我的目的是能够提取列 1 中具有最大值的行。 但考虑到下面的文件 input.txt:

0.0008    6
9.0    10
9.0    19
0.7    33

我得到的输出是

9.0    19

但我希望是这样的

9.0    10
9.0    19

当我有两个最大值时,在本例中为 9(在第一列中),该命令只打印其中一个行,而不是所有具有最大值 9 的行。

我的代码中的哪些更改将允许您打印最大值为 9 的所有行?

【问题讨论】:

    标签: indexing awk max line


    【解决方案1】:

    根据您显示的尝试,请尝试以下操作。

    awk '
    {
      max=(max>$1?max:$1)
      arr[$1]=(arr[$1]?arr[$1] ORS:"")$0
    }
    END{
      print arr[max]
    }
    ' Input_file
    

    说明:为上述添加详细说明。

    awk '                                 ##Starting awk program from here.
    {
      max=(max>$1?max:$1)                 ##Creating max to get maximum value as $1 per line.
      arr[$1]=(arr[$1]?arr[$1] ORS:"")$0  ##Creating array arr with index of 1st field and keep adding its value to it with a new line.
    }
    END{                                  ##Starting END block of this program from here.
      print arr[max]                      ##Printing arr with index of max here.
    }
    ' Input_file                          ##Mentioning Input_file name here.
    

    【讨论】:

    • awk '{max=max&gt;$1?max:$1;arr[$1]=(arr[$1]?arr[$1] ORS:"") $0} END{print arr[max]}' 正如您在该版本也正常工作之前所显示的那样。
    • @7beggars_nnnnm,是的,它只是完整形式的代码,为了更好地理解,我从一个衬里改为完整形式,干杯:)
    • @7beggars_nnnnm,你好,恕我直言,你会打开一个新问题而不是编辑旧问题。现在你已经不接受我根据你展示的样本给出的工作答案了。请不要这样做,不应编辑旧答案,因为它们可能会使读者/未来的读者感到困惑。请求您将问题恢复为旧表单并打开一个新问题,谢谢
    • 我要求用户 anubhaava 将他对我在此处创建的新问题的回复 stackoverflow.com/questions/66960921/…
    • @7beggars_nnnnm,好的,谢谢,我早上上网时也会检查你的新问题。
    【解决方案2】:

    你可以使用这个awk:

    awk '$1+0 != $1 {next} FNR==NR {if (max < $1) max=$1; next} $1 == max' file{,}
    
    9.0    10
    9.0    19
    

    请注意,我们在第一阶段计算max,然后在第二阶段打印所有$1max 值相同的记录。

    PS:您的示例输入不是您在问题中使用的管道分隔,但如果您有管道分隔文件,请使用:

    awk -F'|' '$1+0 != $1 {next} FNR==NR {if (max < $1) max=$1; next} $1 == max' file{,}
    

    【讨论】:

    • 查看我的编辑更新,很抱歉,我没有考虑到带有数字的线条之间存在装饰,这影响了我的需求问题。
    • 我正在检查您对上一个答案所做的更改,但它工作正常。
    • 我想将您对此的回复移至新问题stackoverflow.com/questions/66960921/…,而不是编辑当前问题。
    • 为了不影响之前从用户 ravindersingh13 接受的回复,新问题已创建,请将您的回复也发布在那里,以便您的回复得到利用。
    猜你喜欢
    • 2021-07-01
    • 2022-11-16
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多