shell 在bash中,如何在忽略前缀的情况下进行排序?

qzwqbdag  于 2023-10-23  发布在  Shell
关注(0)|答案(2)|浏览(111)

我知道sort命令可以只使用每个输入行上的一些信息作为排序键,例如。使用sort -k 2跳过字符的初始序列直到空白;我知道我可以用-t来表示不同的字段。
但是,假设我想对输入进行排序,同时忽略前几个字符--这不是固定的。例如:

bar10
baz12
foo1
gaa11
quu2

应该变成,只使用第四个字符和以后:

foo1
bar10
gaa11
baz12
quu2

当然,我可以用一种更复杂的脚本语言来做到这一点,比如awk(例如,但是有没有更简单的方法可以代替呢?

p8ekf7hl

p8ekf7hl1#

正如评论中提到的,它只是:sort -k1.4
sort理解的语法在标准中解释得相当枯燥:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html
(But它提供了一些例子)。
值得记住的是,locale设置会影响输出顺序。

rdlzhqv9

rdlzhqv92#

假设你的前缀没有空格,你可以这样写:

prefix_length=3
sed -r 's/^(.{'$prefix_length'})/\1 /;' | \
sort -k 2 | \
sed -r 's/^(.{'$prefix_length'}) /\1/;'

它的作用:

  • 第一个sed命令在(非固定)前缀后插入一个空格字符
  • 然后我们进行排序,使用空格作为字段“空”,第二个字段作为键
  • 第二个sed命令删除插入的空格字符

相关问题