按最后一个“元素”对行进行排序 [非 csv 文本文件]

Lee*_*Lee 1 sorting bash shell text

对于具有相同列数且由点分隔符分隔的行,例如

aa.bb
cc.dd
...
Run Code Online (Sandbox Code Playgroud)

按最后一列排序很容易

sort -t. -k2,2 file
Run Code Online (Sandbox Code Playgroud)

如果文本文件有不同的“列”,例如

aa.b.xb
cc.dd
xx.cc.aa
a.b.c.d.e
...
Run Code Online (Sandbox Code Playgroud)

那么如何按最后一个“列”对行进行排序

xx.cc.aa
cc.dd
a.b.c.d.e
aa.b.xb
...
Run Code Online (Sandbox Code Playgroud)

tsh*_*ono 5

您可以在 中使用Schwartzian 变换bash

awk -F. '{print $NF "\t" $0}' file | sort -k1,1 | cut -f2-
Run Code Online (Sandbox Code Playgroud)
  • 首先提取最后一列并将其添加到由制表符分隔的行前面。
  • 然后使用第一列(前置)对行进行排序。
  • 最后用命令删除第一列cut