使用字符的 ascii 码作为输入进行排序

使用字符的 ascii 码作为输入进行排序

我想用特定分隔符 (ascii 0xff) 对文件进行排序,并且记录以零结尾。但我无法使用以下命令:

$ sort -z -t \xff -o data data

错误信息是:

在 FreeBSD 上:

sort: xff: Invalid argument

在 Linux 上:

sort: multi-character tab ‘xff’

有没有办法以可移植的方式做到这一点?(跨 gnu coreutils 排序和 bsd 排序以及跨不同的 shell)。

答案1

嗯,这$'\xff'实际上是Bash 功能并且应该与操作系统无关。这在 FreeBSD 9.1 上有效(尝试过 bash、ksh、zsh):

$ head -3 foo
26436�22977
4478�3214
2882​​2�4147

$ head -3 foo | 排序-n -t $'\xff' -k2
4478�3214
2882​​2�4147
26436�22977

好的,如果这不起作用,也许它可以与 (BSD-)awk 一起使用:

$ head -3 a | awk -F $'\xff' '{打印 $1" "$2}' | sort -nk2 | awk '{打印 $1"\xff"$2}'
4478�3214
2882​​2�4147
26436�22977

是的,它很丑 :-\

相关内容