Text-Processing
如何按最後一列進行數字排序?
我有這個輸入:
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 的預定義數組掃描順序