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

问题描述 投票:0回答:1

我知道排序命令可以仅使用每个输入行上的一些信息作为排序键,例如使用

sort -k 2
跳过初始字符序列直到空格;我知道我可以使用不同的字段分隔符与
-t

但是,假设我想对输入进行排序,同时忽略前几个字符 - 这些字符不是固定的。例如,这个:

bar10
baz12
foo1
gaa11
quu2

应该变成,仅使用第 4 个字符及以后:

foo1
bar10
gaa11
baz12
quu2

当然,我可以使用更复杂的脚本语言来完成此操作,例如 awk(例如this way)。但我可以做一些更简单的事情吗?

shell sorting command-line prefix unix-sort
1个回答
0
投票

好吧,假设你的前缀没有空格,你可以写:

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

它的作用:

  • 第一个
    sed
    命令在(非固定)前缀后面插入一个空格字符
  • 然后我们排序,使用空格作为字段分隔符,第二个字段作为键
  • 第二个
    sed
    命令删除插入的空格字符
© www.soinside.com 2019 - 2024. All rights reserved.