Solaris:对数值进行排序

Solaris:对数值进行排序

我有一个具有以下值的文件。

keyword1 19.02 1.69.94
keyword2 19.01 1.68.118
keyword3 19.02 1.69.119
keyword4 19.01 1.68.115
keyword5 19.02 1.69.304
keyword6 19.02 1.69.39

我希望这些根据第三列进行排序。

在 Linux 中,以下使用版本排序的命令有效。

raj@VirtualBox:$ grep 19.02 file.txt | sort -t ' ' -k3 -V
keyword6 19.02 1.69.39
keyword1 19.02 1.69.94
keyword3 19.02 1.69.119
keyword5 19.02 1.69.304

在 Unix(Solaris) 上,版本排序似乎丢失了。我四处寻找 Solaris 上的可行替代方案,但没有找到。

我还可以使用 python 中的解决方案。

答案1

您可以尝试反转字段并用作.字段分隔符:

awk '{print $3,$2,$1}' your_file |
   sort -nt. -k1,1 -k2,2 -k3,3 |
   awk '{print $3,$2,$1}'

另外,我的 Solaris 系统有 GNU 类型(与 linux 中相同),/usr/gnu/bin/sort但我不记得曾经安装过它;-)

答案2

您提到python- 以下是一个 python2 解决方案,希望可以在 Solaris 计算机上存在的任何 python2 版本中工作

lines = open('file.txt').readlines()
lines = [l.split() for l in lines]
lines = [line for line in lines if line[1] == "19.02"]
def sorter(x):
    z = x[-1].split(".")
    return x[0], x[1], [int(y) for y in z]

lines.sort(key=sorter)
for line in lines:
    print " ".join(line)

相关内容