如何按最后一列进行数字排序?

如何按最后一列进行数字排序?

我有这个输入:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

我需要这个输出:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

所以我需要按最后一列对行进行排序。

我不知道一行中有多少列。

我只是不明白,如何去做。我没有“perl 能力”。我只有 sed、awk、cut 等的平均脚本编写能力。

有人知道该怎么做吗?

答案1

以下命令行用于awk添加 file.txt 每行的最后一个字段,进行反向数字排序,然后用于cut删除添加的字段:

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

答案2

按数字降序对最后一列进行排序GNUawk:

awk '{
       # save current row in array with current row number as index
       row[NR]=$0

       # save current last field in array with current row number as index
       last[NR]=$NF
     }
     END{
       # sort array "last" numerically ("num") based on its
       # values ("val") descending ("desc")
       PROCINFO["sorted_in"]="@val_num_desc";

       for(i in last)
         print row[i]
     }' file

作为一行:

awk '{ row[NR]=$0; last[NR]=$NF } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in last) print row[i] }' file

输出:

你好,我的名字是乔丹:476
你好,我的名字是马努:98
你好,我的名字是乔伊:45
你好,我的名字是 Loi:23
你好,我的名字是约翰:4

8.1.6 使用 gawk 的预定义数组扫描顺序更多排序算法和8 个强大的 awk 内置变量 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

相关内容