web-dev-qa-db-ja.com

Linuxで1列目と2列目をそのままにして3列目で並べ替えますか?

フラットファイルを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番目の列で並べ替えることはできませんでした。

誰か助けてもらえますか?

17
user1429246

これを試して:

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で終了します。それ以外の場合は、ソートを決定するために残りの行を使用し続けます)

-k3は、2番目のキーとして3番目のフィールドでソートすることを意味します。背後に他のフィールドがないため、-k3,3を指定する必要はありませんが、どちらも問題はありません。

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

詳細については、こちらをご覧くださいSO質問 nixソートで複数のキーをソートする および ソートマニュアルページ

37
Levon