我知道sort命令可以只使用每个输入行上的一些信息作为排序键,例如。使用sort -k 2跳过字符的初始序列直到空白;我知道我可以用-t来表示不同的字段。但是,假设我想对输入进行排序,同时忽略前几个字符--这不是固定的。例如:
sort -k 2
-t
bar10 baz12 foo1 gaa11 quu2
应该变成,只使用第四个字符和以后:
foo1 bar10 gaa11 baz12 quu2
当然,我可以用一种更复杂的脚本语言来做到这一点,比如awk(例如,但是有没有更简单的方法可以代替呢?
p8ekf7hl1#
正如评论中提到的,它只是:sort -k1.4sort理解的语法在标准中解释得相当枯燥:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html(But它提供了一些例子)。值得记住的是,locale设置会影响输出顺序。
sort -k1.4
sort
locale
rdlzhqv92#
假设你的前缀没有空格,你可以这样写:
prefix_length=3 sed -r 's/^(.{'$prefix_length'})/\1 /;' | \ sort -k 2 | \ sed -r 's/^(.{'$prefix_length'}) /\1/;'
它的作用:
sed
2条答案
按热度按时间p8ekf7hl1#
正如评论中提到的,它只是:
sort -k1.4
sort
理解的语法在标准中解释得相当枯燥:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html(But它提供了一些例子)。
值得记住的是,
locale
设置会影响输出顺序。rdlzhqv92#
假设你的前缀没有空格,你可以这样写:
它的作用:
sed
命令在(非固定)前缀后插入一个空格字符sed
命令删除插入的空格字符