sortingpipe道分隔的字段不按预期行为

考虑这个小文本文件:

ab a 

如果我们通过sorting(1)运行,我们得到

 a ab 

因为当然是在ab之前。

但现在考虑这个文件:

 ab|c a|c 

如果我们通过sort -t'|' ,我们再次期望在ab之前进行sorting,但它不会! (在你的Unix版本下试一下,看看。)

我认为这里发生的事情是, sort-t选项并不是真正的分隔字段 – 它可能正在改变字段2的开头的方式(比如说),但是它不会改变字段1 结束的方式。 a|cab|c之后sorting,因为'|' 在ASCII之后的'b'之后。 (就好像-t'|'参数被忽略了一样,因为没有它就会得到相同的结果。)

那么这是一个错误还是我的理解呢? 有没有一种方法来正确sorting第一个pipe道分隔的领域?

这个问题出现在我试图回答另一个SO问题, join声明省略条目 。

sort的默认行为是将字段1到行尾的所有内容作为排序关键字。 如果您希望先对字段1进行排序,然后再对字段2进行排序,则需要明确指定。

 $ sort -k1,1 -k2,2 -t'|' <<< $'ab|c\na|c' a|c ab|c