根据从最高到最低的顺序对Linux文件中的字段进行排序

时间:2016-01-22 06:40:48

标签: linux sorting

我有一个文件,其中有3个字段。

字段1具有名称,字段2和3具有数字值。我需要根据其中存在的最高值对所有字段进行排序。

File1.txt

ASANSOL 16.76   31.991
ASANSOL 16.72   33.687
ASANSOL 16.48   25.344
ASANSOL 16.74   30.777
BANGALORE   13.39   17.243
BANGALORE   14.34   20.852
BANGALORE   15.58   25.112
BANGALORE   14.59   34.752
BANGALORE   17.93   2.792
BHOPAL  16.53   13.487
BHOPAL  16.7    11.599
BHOPAL  16.65   16.003
BHOPAL  16.87   20.674

排序并获取唯一值后,所需的输出应如下所示:

ASANSOL     16.76   33.687
BANGALORE   17.93   34.752
BHOPAL      16.87   20.674

帮帮我怎样才能解决这个问题? #Script会更好

2 个答案:

答案 0 :(得分:1)

抱歉,我先回答了一个问题。正确的答案更简单:

awk '{ d1[$1] = $2; d2[$1] = $3 } END { for(x in d1) print x, d1[x], d2[x] }' <filename>

-----------老答案-----------------

答案很简单:

cat <filename> | awk '{ if($2>$3) { max = $2 } else { max = $3 } print max, $0 }' | sort -r | sed 's/^[0-9.]* //'
  1. 使用awk查找最大数量并将其添加到每一行;
  2. 排序;
  3. 使用sed删除第一列

答案 1 :(得分:-1)

如果您不想编写一个小脚本来处理此问题,可以使用awk进行排序: http://www.gnu.org/software/gawk/manual/gawk.html