系列中的最小值和最大值

时间:2017-05-17 09:02:36

标签: awk

我的问题如下:我有一个文件,第一列中有组号,第二列中有不同的值:

1 34
1 43
1 6
2 12
2 9
3 57
3 19
3 78

我需要的是为每个组提取最小值和最大值:

1 6,43
2 9,12
3 19,78 

我试图用awk做但没有管理。我现在正在做的是将每个组分成不同的文件,并分别找到最小值和最大值。将使用awk感谢任何关于如何在一个文件中执行此操作的建议。谢谢。

1 个答案:

答案 0 :(得分:1)

# If we've seen this group before, reassign min and max if necessary:
$1 in min {
  min[$1] = ($2 < min[$1]) ? $2 : min[$1]
  max[$1] = ($2 > max[$1]) ? $2 : max[$1]
  next
}

# First time we've seen this group. Initialize min and max:
{ min[$1] = max[$1] = $2 }

# Output the resulting min and max values. (Order will be
# somewhat random):
END {
  for (i in min) {
      print i " " min[i] "," max[i]
  }
}

如果您关心订单,可以将结果通过管道排序:

$ awk -f mm.awk file | sort -n
1 6,43
2 9,12
3 19,78