
たくさんの文字列(約 300 個)があり、それらはすべて 4 文字なので、
XYZA, ZHF3, RTt2 etc.
2 つの要件に応じて並べ替えたいと考えています。
- 最後の2文字の順に並べ替えます
- 最初の2文字に基づいて、最後の2文字が同じである単語を並べ替えます。
つまり、XXYY 形式の文字列があり、表示されているルールに従って並べ替えたいということです。
それをやろうとしているのsort -k.1.3,1.4
ですが、同じものがランダムに並べられてしまいます。15AA, a2AA, 0CAA etc.
どうすれば取り除くことができますか?
答え1
-k
複数回使用できます。キー フィールドが複数ある場合、前のキーがすべて等しいと判断された場合にのみ、後のキーが比較されます。
<datafile sort -k 1.3,1.4 -k 1.1,1.2
ソートは に依存することに注意してくださいLC_COLLATE
。
答え2
逆順に操作を実行します。まず、最初の2つ文字で区切って、最後の 2 文字で区切ることもできます。次のようにすることもできます。
cat file | sort | sort -k 1.3 -s
このsort
コマンドは、安定したソート、つまり、2 つの行が「等しい」場合は、互いの相対的な順序が保持されます。したがって、2 番目のステップでは、3 番目と 4 番目の文字が同一の行は、最初のステップからの順序を都合よく保持します。