【问题标题】:awk: get maximum values and the fields that correspond to the valuesawk:获取最大值和对应值的字段
【发布时间】:2016-03-22 20:28:01
【问题描述】:

以下是使用 awk 获取行的最大值/最小值的方法。

AWK - find min value of each row with arbitrary size

但是,我需要更进一步,打印包含最大/最小值的字段。例如,一行的最大值是 100,它位于 $13,所以输出应该是 100 和 13。这是否超出了 awk?

【问题讨论】:

  • 只需将字段编号保存到单独的变量中,并在找到新的最大值时对其进行更新。

标签: bash awk


【解决方案1】:

你可以这样做:

awk '{max=$1;c=1;for(i=2;i<=NF;i++)if($i>max){c=i;max=$i} printf "max:%s, column:%s\n",max, c}'

例如:

kent$  echo "1 4 3 2 6 5 8"|awk '{max=$1;c=1;for(i=2;i<=NF;i++)if($i>max){c=i;max=$i} printf "max:%s, column:%s\n",max, c}' 
max:8, column:7

【讨论】:

  • 我认为,END 部分的内容将按行完成。所以,需要在 for 循环体之后移动。
  • 正确的方法,但您不需要 2 个变量,只需 c$c(可能重命名为 maxc 或其他名称):awk '{maxc=1;for(c=2;c&lt;=NF;c++)if($c&gt;$maxc){maxc=c} printf "max:%s, column:%s\n",$maxc, maxc}'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2023-02-17
  • 2013-09-13
相关资源
最近更新 更多