POSIX“排序-n”字母字符在0和1之间?

时间:2013-05-02 17:31:22

标签: bash shell sorting

我无法让POSIX“排序”以我想要的方式行事。排序数字文件名时,以字母开头的名称显示在0和1之间。

为什么会这样?

我可以使用不同的排序选项来达到预期效果吗?

$touch 0 1 a
$ls | sort -n

期望的输出:     0     1     一个

实际输出:     0     一个     1

在gnu实现中,“ - g”大致完成了我想要的,但那不是POSIX。不幸的是,这意味着我无法使用它。

2 个答案:

答案 0 :(得分:0)

因为你有-n。这意味着数字,因此a被视为0。摆脱-n,你应该是正确的(11之前的2代价

答案 1 :(得分:0)

如果要将输出显式排序为

  • 首先对文件进行数字排序,使其分别为0,1,2,11,222和
  • 所有其他文件已排序

你可以用

来做
cat <(ls -1 | grep '^[0-9]' |sort -n) <(ls -1 | grep -v '^[0-9]' | sort)

如此catenate输出两个命令

  • 以数字方式排序以数字开头的文件和
  • 对其他文件进行排序(不以数字开头)

但是,这仅适用于bash,并且不知道POSIX有多少bash,如果bash不正常,则可以使用临时文件......