Text-Processing

如何按最後一列進行數字排序?

  • November 23, 2021

我有這個輸入:

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 等的平均腳本能力。

有人知道怎麼做嗎?

以下命令行用於awk添加 file.txt 每一行的最後一個欄位,進行反向數字排序,然後用於cut刪除添加的欄位:

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

使用GNU awk按數字降序對最後一列進行排序:

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
你好,我的名字是 Joi:45
你好,我的名字是 Loi:23
你好,我叫約翰:4

有關更多排序算法和8 個強大的 Awk 內置變數 - FS、OFS、RS、ORS、NR、NF、FILENAME、FNR,請參見8.1.6 使用帶有 gawk 的預定義數組掃描順序

引用自:https://unix.stackexchange.com/questions/10524