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

3番目の列に基づいてソートしたいです。

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- 以下は、Solarisシステム上のすべてのpython2バージョンで動作できる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)

関連情報