Unix排序实用程序:使用十六进制字节值作为分隔符
我想知道是否可以使用十六进制值作为Unix sort
实用程序的分隔符。 基本上我想要做的事,如:Unix排序实用程序:使用十六进制字节值作为分隔符
sort -t '\x00' <input
但是,如果我在上面的方法做它,它不工作。
如果你读了GNU sort
手册,你会发现:
-t separator
,--field-separator=separator
使用字符分隔符作为字段分隔每个 线找到排序键时。默认情况下,字段由非空白字符和空白字符之间的空字符串分隔。默认情况下,空格是空格或制表符,但是,LC_CTYPE语言环境可以更改此设置。 也就是说,给定输入行
foo bar
,排序将其分为字段foo
和bar
。字段分隔符不被认为是 之前的字段或后面的字段的一部分,因此与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字节,而不是新行
这不是,可悲的是,你在找什么。
sort -t'\ 0'起作用。非常感谢。 – Lucas 2011-04-26 23:58:00
您是否想对十六进制数字进行排序?或者你只是想用x00作为分隔符?如果是后者,那么用例是什么? – srikanta 2011-04-26 23:07:38