複数の前提条件を持つ文字列を並べ替えるにはどうすればよいでしょうか?

複数の前提条件を持つ文字列を並べ替えるにはどうすればよいでしょうか?

たくさんの文字列(約 300 個)があり、それらはすべて 4 文字なので、 XYZA, ZHF3, RTt2 etc.2 つの要件に応じて並べ替えたいと考えています。

  1. 最後の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 番目の文字が同一の行は、最初のステップからの順序を都合よく保持します。

関連情報