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

Lan*_*nes 28 text-processing sort

我有这个输入:

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4
Run Code Online (Sandbox Code Playgroud)

我需要这个输出:

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1
Run Code Online (Sandbox Code Playgroud)

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

我不知道一行有多少列。

我只是想不通,该怎么做。我没有“perl 权限”。我只有 sed、awk、cut 等的平均脚本能力。

有人知道怎么做吗?

for*_*sck 45

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

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '
Run Code Online (Sandbox Code Playgroud)

  • @johnny8888,@forcefsck:在 awk 中,`$` 后面可以跟任何表达式。“[字段编号表达式的计算结果为非负整数以外的任何值的效果未指定](http://pubs.opengroup.org/onlinepubs/009695399/utilities/awk.html#tag_04_06_13_03)”。GNU awk(在我的系统上)将像 `"\n"` 这样的字符串视为零。其他(例如 A、W 和 K 的原始实现)中止并显示错误消息。如果 `RS` 恰好是一个数字,你会在任何实现中获得相应的字段。所以不要这样做,使用`$0`。 (2认同)
  • 真的很整洁!因此,对正在发生的事情的详细解释是:使用 awk,首先打印最后一个字段,然后打印整个记录,按数字反向排序,然后使用 cut 修剪掉第一列。 (2认同)
  • 这里使用的方法称为[Schwartzian变换](https://en.wikipedia.org/wiki/Schwartzian_transform)。 (2认同)