次のファイルがあります。
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
間違った場所に達しましたfoo10a
(foo10b
私たちがそんなに離れて計算したとき)。
ベストアンサー1
awk
GNU関数を使用して解決策を見つけました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
...など。
それを実行しsort
、cut
私が欲しいフィールドを見つけます。完璧。