开发者

linux bash 'sort' in dictionary order - problem with zeros

I'm seeing something strange with 'sort' in RedHat Enterprise Linux 5 x86_64 and in Ubuntu 9.1. I'm using bash.

First here's what I think is right to expect from sort using dictionary order:

[stauffer@unix-m sortTrouble]$ cat st1

1230

123

100

11

10

1

123

1230

100

[stauffer@unix-m sortTrouble]$ sort st1

1

10

100

100

11

123

123

1230

1230

[stauffer@unix-m sortTrouble]$

Now here's what happens when ther开发者_Go百科e's a second column (tab-delimited, even though it looks messy here):

[stauffer@unix-m sortTrouble]$ cat st2

1230 1

123 1

100 1

11 1

10 1

1 1

123 1

1230 1

100 1

[stauffer@unix-m sortTrouble]$ sort st2

100 1

100 1

10 1

1 1

11 1

1230 1

1230 1

123 1

123 1

Notice how the sort order for column 1 is different now. '11' gets put correctly after '1', but '10' and '100' do not. Similarly for '1230'. It seems like zero causes trouble.

This behavior is inconsistent, and it causes problems when using 'join' because it expects dictionary sorting.

On Mac OSX 10.5, the st2 file sorts like st1 in the first column.

Am I missing something, or is this a bug?

Thanks, Michael


from the man page

   -b, --ignore-leading-blanks
          ignore leading blanks

   -g, --general-numeric-sort
          compare according to general numerical value

   -n, --numeric-sort
          compare according to string numerical value

ex:

andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort
1
10
2
andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort -g
1
2
10


The sort can be performed the way you want by restricting the key to the column you're interested in:

sort -k1,1 inputfile
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜