web-dev-qa-db-ja.com

UNIXは複数のフィールドをソートします

以下のファイルを次のように並べ替えようとしています。

col1(昇順)col2(降順)col3(昇順)col4(降順)

-k構文ではなく、+-コマンドを使用したい。古い構文の使用方法を理解しました。

sort -t " " +0 -1 +2 -3 +4r testfile

しかし、それはほとんど直感的ではありません。 -kオプションを使用する正しい方法がわかりません。ありがとうございました。

テストファイルは次のとおりです。

5 3 2 9
3 4 1 7
5 2 3 1
6 1 3 6
1 2 4 5
3 1 2 3
5 2 2 3

結果:

1 2 4 5
3 4 1 7
3 1 2 3
5 3 2 9
5 2 2 3
5 2 3 1
6 1 3 6
15
WLinden

次のいずれかが必要です。

sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r
sort -k1,1 -k2,2r -k3,3 -k4,4r

次のトランスクリプトのように:

pax$ echo '5 3 2 9
3 4 1 7
5 2 3 1
6 1 3 6
1 2 4 5
3 1 2 3
5 2 2 3' | sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r

1 2 4 5
3 4 1 7
3 1 2 3
5 3 2 9
5 2 2 3
5 2 3 1
6 1 3 6

次のように、適切な数値(可変長)として処理する場合は、必ず-nオプションを指定してください。

sort -n -k1,1 -k2,2r -k3,3 -k4,4r
28
paxdiablo

sort -n -k 1n -k 2rn -k 3n -k 4rnはどうですか?
-k <FIELD><OPT1><OPT2>...ここで、OPT1とOPt2は単にsortオプションです。たとえば、nは数値、rは逆です。

0
Op De Cirkel