最後の列に基づいて数字をソートする方法は?

最後の列に基づいて数字をソートする方法は?

次の入力があります。

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

したがって、最後の列に基づいて行を並べ替える必要があります。

1行にいくつの列があるかわかりません。

どうすればいいのか理解できません。私は「パール技術」を持っていません。私はsed、awk、cutなどの平均的なスクリプト技術のみを持っています。

これを行う方法を知っている人はいますか?

答え1

次のコマンドラインは、awkfile.txtの各行の最後のフィールドを追加し、逆数のソートを実行してから、追加されたフィールドを削除するcutために使用されます。

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

答え2

最後の列を数値の降順で並べ替える牛に似た一種の栄養奇妙な:

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
こんにちは。私の名前はManu:98です。
こんにちは、私の名前はJoyです:45
こんにちは、私の名前はロイです:23
こんにちは。私の名前はジョンです:4

バラより8.1.6 gawkの事前定義された配列スキャン順序の使用より多くのソートアルゴリズムと8つの強力なawk組み込み変数 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

関連情報