这是我的制表符分隔文件 t.tsv:
$ cat t.tsv
2022/05/05 -258.03
2022/05/07 -18.10
2022/05/09 -10.74
2022/05/09 -132.60
2022/05/12 -18.56
2022/05/12 -20.20
2022/05/17 -11.00
2022/05/17 -112.91
2022/05/17 -51.43
2022/05/17 -64.78
2022/05/18 -13.96
2022/05/18 -13.96
2022/05/18 -7.51
2022/05/19 -17.08
2022/05/20 -33.08
我正在使用 MacOS 12.4 排序(来自手册页:排序实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范)首先按 alpha seq 升序按 col 1 排序,然后按数字升序按 col2 排序。
$ cat t.tsv|sort --field-separator='\t' --key=1,1 --key=2,2n
2022/05/05 -258.03
2022/05/07 -18.10
2022/05/09 -10.74
2022/05/09 -132.60
2022/05/12 -18.56
2022/05/12 -20.20
2022/05/17 -11.00
2022/05/17 -112.91
2022/05/17 -51.43
2022/05/17 -64.78
2022/05/18 -13.96
2022/05/18 -13.96
2022/05/18 -7.51
2022/05/19 -17.08
2022/05/20 -33.08
我很困惑为什么当第一列相同时,第二列没有按升序数字顺序排序。许多 SE 对同一问题的回答都说(a)您将单个列指定为--key=1,1
,并且(b)您可以将选项-n
应用于单个键定义,例如--key=2,2n
.
更新:我应该提到我的外壳是bash
.
我不知道
sort
理解\t
或其他此类字符表示的实现,您需要使用ANSI-C 引用来代替:此外,根据这个 macOS 手册页,“用于排序的 Apple 手册页包括上述所有内容的 GNU 长选项,但这些尚未(尚未)在 macOS 下实现。 ”在最近的 macOS 版本中,两者
--key
和--field-separator
都实现了sort
,但我仍然会使用标准的短选项来保证可移植性:上面的命令与 macOS、GNU 和 busybox 一起
sort
返回: