20

フラット ファイルを 3 列目で並べ替え、最初の列はそのままにしておく必要があります [最初の列は既に並べ替えられています] (Linux の場合)。(2 番目の列は変更される可能性があります)

i/p ファイルの例:-

b:di:wave
b:di12:red
b:di12:wave
b:di06:pir

次のようになります:-

b:di06:pir
b:di12:red
b:di12:wave
bast:di:wave

いくつかの並べ替えオプションを試しましたが、2 番目の列でのみ並べ替えることができ、3 番目の列では並べ替えることができませんでした。

誰か助けてくれませんか?

4

1 に答える 1

42

これを試して:

sort  -t: -k1,1 -k3 data.txt

与えます:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird
bast:display-san-07:waverider
bast:display-san-12:waverider

これは、1 番目のフィールドを主キーとして、3 番目のフィールドを 2 番目のキーとして並べ替え、行を次のようにフィールドに分割します。:

詳細

data.txt投稿の 4 行が含まれています。

複数のフィールドをソートキーとして指定できます。マニュアルページを参照してください

-k1,1最初のフィールドでのソートを意味します(フィールド 1 で開始し、フィールド 1 で終了します。そうでない場合は、ソートを決定するために行の残りを使用し続けます)

-k33 番目のフィールドをセカンダリ キーとしてソートすることを意味します。背後に他のフィールドがないため、指定する必要はありません-k3,3が、問題はありません。

-t:文字で行内のフィールドを区切ることを意味し:、それ以外の場合はデフォルトで空白が使用されます

詳細については、この SO の質問を参照してください。Sorting multiple keys with Unix sortおよびsort のマニュアル ページ

于 2012-06-13T00:27:22.493 に答える