Unix排序实用程序:使用十六进制字节值作为分隔符

问题描述:

我想知道是否可以使用十六进制值作为Unix sort实用程序的分隔符。 基本上我想要做的事,如:Unix排序实用程序:使用十六进制字节值作为分隔符

sort -t '\x00' <input 

但是,如果我在上面的方法做它,它不工作。

+0

您是否想对十六进制数字进行排序?或者你只是想用x00作为分隔符?如果是后者,那么用例是什么? – srikanta 2011-04-26 23:07:38

如果你读了GNU sort手册,你会发现:

-t separator--field-separator=separator

使用字符分隔符作为字段分隔每个 线找到排序键时。默认情况下,字段由非空白字符和空白字符之间的空字符串分隔。默认情况下,空格是空格或制表符,但是,LC_CTYPE语言环境可以更改此设置。 也就是说,给定输入行foo bar,排序将其分为字段foobar。字段分隔符不被认为是 之前的字段或后面的字段的一部分,因此与sort -t " "相同的输入行有三个 字段:空字段'foo'和'bar'。但是,延伸至行末尾 的字段(如-k 2)或由范围(如-k 2,3)组成的字段保留范围端点之间存在的字段 。 要指定ASCII nul作为字段分隔符,请使用双字符字符串\0, ,例如sort -t ’\0’

这与旧的(GNU CoreUtils 5.97)sort一起工作。


似乎有没有一个方法可以做到这一点在Linux上。我已经尝试了多种技巧来得到一个NUL(0×00)个字节到分隔符,和sort命令抱怨:

sort: empty tab 

你不能用控制-V做@为你正在输入命令行; shell(bash)不喜欢那样。

我有一个写入字节输出程序genchar,所以我尝试:

sort -t "$(genchar 0)" ... 

,但这并没有工作,要么;我从sort得到错误。

$ genchar 0 | od -c 
0000000 \0 \n 
0000002 
$ 

如果你能够使用control-A,那就没有问题了。

请注意,sort不扩展'-t'选项参数中的十六进制转义序列;你必须提供你想要使用的实际字节。您可能无法使用换行符作为字段分隔符;如果你有,记录分隔符是什么?

GNU '排序'(Coreutils的5.97,在任何速率;当前版本为8.12 - 作为2011-04-26)确实支持-z选项:

  • -z--zero-terminated端线与0字节,而不是新行

这不是,可悲的是,你在找什么。

+0

sort -t'\ 0'起作用。非常感谢。 – Lucas 2011-04-26 23:58:00