考虑这个小文本文件:
ab
a
如果我们通过sort(1)运行它,我们得到
a
ab
因为当然a
出现在ab
之前。
但现在考虑一下这个文件:
ab|c
a|c
如果我们通过sort -t'|'
运行它,我们再次期望a
在ab
之前排序,但事实并非如此! (在你的Unix版本下试试看看。)
我认为这里发生的是-t
的{{1}}选项不是真正分隔字段 - 它可能正在改变(例如)开头的方式将找到字段2,但它不会改变字段1 结束的方式。 sort
之后a|c
排序,因为ab|c
在'|'
之后出现在ASCII中。 (它好像忽略了'b'
参数,因为如果没有它,你会得到相同的结果。)
这是-t'|'
中的错误还是我对它的理解?有没有办法正确排序第一个管道分隔字段?
我试图回答另一个SO问题,Join Statement omitting entries。
答案 0 :(得分:0)
sort
的默认行为是将从字段1到行尾的所有内容视为排序键。如果您希望首先对字段1进行排序,然后对字段2进行排序,则需要明确指定。
$ sort -k1,1 -k2,2 -t'|' <<< $'ab|c\na|c'
a|c
ab|c