考虑这个小文本文件:
ab a
如果我们通过sorting(1)运行,我们得到
a ab
因为当然是在ab
之前。
但现在考虑这个文件:
ab|c a|c
如果我们通过sort -t'|'
,我们再次期望在ab
之前进行sorting,但它不会! (在你的Unix版本下试一下,看看。)
我认为这里发生的事情是, sort
的-t
选项并不是真正的分隔字段 – 它可能正在改变字段2的开头的方式(比如说),但是它不会改变字段1 结束的方式。 a|c
在ab|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