awk 文本处理采用限制值

awk 文本处理采用限制值

我有一个这样的txt文件

32 1
32 2
32 3
32 4
32 5
17 8
17 9
17 10
17 11
14 33
14 34
14 35

我想要得到像这个这样的txt文件!因此,我们从字段二中取出字段一中的值的最小值和最大值,并打印它们。

32 1 5
17 8 11
14 33 35

任何想法 ?谢谢 。

答案1

使用datamash:

datamash -t ' ' -g 1 min 2 max 2 < file

输出:

32 1 5
17 8 11
14 33 35

答案2

使用awk

awk 'min[$1] == "" || $2 < min[$1] { min[$1] = $2 }
     max[$1] == "" || $2 > max[$1] { max[$1] = $2 }
     END { for (i in min) print i, min[i], max[i] }' file |
sort -rn

max这会记住与和关联数组中第一列关联的最大值和最小值min。处理完所有数据后,将打印这些值。

最后sort -rn的确保输出按降序排序。

答案3

按照您的输入排序:

$ awk '$1 != p{printf "%s%s",max,$0; p=$1} {max=OFS $2 ORS}  END{printf "%s", max}' file
32 1 5
17 8 11
14 33 35

相关内容