按一列按字典顺序对多个分隔文件进行排序,按另一列按数字排序

按一列按字典顺序对多个分隔文件进行排序,按另一列按数字排序

我希望min_ex按第一列按字典顺序和第二列按数字对下面的 TSV 文件(称为 )进行排序。

A X, N    2.2
A, N    5.7
A, A    5.8
A, N    2.1
A, T    0.2
B G, M    2.3
B, L    0.1
B, I    0.2
B, M    9.3
B, C    9.9

我尝试用 来做到这一点sort -k1,2 -n min_ex。但它不起作用,因为它会导致:

A, A    5.8
A, N    2.1
A, N    5.7
A, T    0.2
A X, N    2.2
B, C    9.9
B G, M    2.3
B, I    0.2
B, L    0.1
B, M    9.3

还认为我也非常确定(通过实验)sort将任何空格作为分隔符,但我没有看到设置分隔符的选项。

我想要使​​用纯 AWK 或sed根本不使用(最好两者都单独使用)的解决方案,并且我希望尽可能保持 POSIX 兼容。

答案1

sort -t$'\t' -k1,1 -k2,2n

就成功了,它是符合 POSIX 标准除了$'\t'部分。-t指定字段分隔符(而不是默认的空白到非空白转换);后缀n可以应用于单个字段定义。

相关内容