入力した最後の文字で並べ替えてから、前の数字で並べ替えますか?

入力した最後の文字で並べ替えてから、前の数字で並べ替えますか?

次のファイルがあります。

foo03a
foo02b
quux01a
foo01a
foo02a
foo01b
foo03b
quux01b

a最後の文字(soとb一緒に表示されます)で並べ替えてから、前の数字、接頭辞(必須ではありません)で並べ替えたいと思います。結果は次のとおりです。

foo01a
quux01a
foo02a
foo03a
foo01b
quux01b
foo02b
foo03b

quux01a実際、quux01b関連グループに属している限り、表示される場所は特に重要ではありません。表示されているようにfoo01b前後に表示されることがありますfoo03b

なぜ?これはブルー/グリーン展開に使用されるサーバー名なので、「A」サーバーを一緒に使用し、「B」サーバーを一緒に使用したいと思います。

GNUソートへの移行が見つかり-kましたが、それを使用して文字列の末尾で計算する特定の文字を指定する方法を理解していません。

試してみましたが、cat foos | rev | sort | rev間違った場所に達しましたfoo10afoo10b私たちがそんなに離れて計算したとき)。

ベストアンサー1

awkGNU関数を使用して解決策を見つけましたmatch

cat foos | \
  gawk 'match($0, /([^0-9]+)([0-9]+)([^0-9]+)/, a) {print a[3], a[2], $0}' | \
  sort | cut -d' ' -f3

このgawkコマンドは正規表現キャプチャを使用してソートキーを生成するため、次のように終了します。

a 03 foo03a
b 02 foo02b

...など。

それを実行しsortcut私が欲しいフィールドを見つけます。完璧。

おすすめ記事