転送するDNSゾーンファイルの抜粋がありますが、これをIPアドレスで昇順に並べ替えたいと思います。これはIPアドレスの並べ替えに関するものではないので(sort -k5V
修正される予定です)、重複としてマークする前にしばらくお読みください。
以下はデータの例です。
esx01.example.com. 3600 IN A 10.1.1.212
ilo01.example.com. 3600 IN A 10.1.1.211
nas01.example.com. 3600 IN A 10.1.1.101
pc001.example.com. 1200 IN A 10.1.1.42
pc002.example.com. 1200 IN A 10.1.1.52
pc003.example.com. 1200 IN A 10.1.1.29
この特別な場合は、最後のオクテットでのみソートできるため、このオクテットは必要ですsort
。
マニュアルページでは、-k
フィールドだけでなく、フィールド内のオフセットとn
数値修飾子を使用できることを確認します。
KEYDEF
F[.C][OPTS][,F[.C][OPTS]]
は開始位置と終了位置です。ここでは、F
フィールド番号とC
フィールドの文字位置の両方が原点1で、停止位置はデフォルトで行末です。 -t と -b の両方が有効でない場合、フィールドの文字は前のスペースの先頭から計算されます。このキーのグローバルソートオプションをオーバーライドするOPTS
1つ以上の単一文字ソートオプション[]。bdfgiMhnRrV
最後のオクテットは便利に5番目のフィールドの文字オフセット8から始まるので、このコマンドで十分であると理解しています。
sort -k5.8n /tmp/axfr.10.1.1
しかし、これは私のデータをまったく並べ替えません。経験的には、実際の場所から始める必要があることがわかりました。15期待どおりにデータを昇順に並べ替えます。
sort -k5.15n /tmp/axfr.10.1.1
pc003.example.com. 1200 IN A 10.1.1.29
pc001.example.com. 1200 IN A 10.1.1.42
pc002.example.com. 1200 IN A 10.1.1.52
nas01.example.com. 3600 IN A 10.1.1.101
ilo01.example.com. 3600 IN A 10.1.1.211
esx01.example.com. 3600 IN A 10.1.1.212
なぜ?
答え1
sort --debug
いくつかの手がかりを得るには、このオプションを使用してください。
$ echo 'esx01.example.com. 3600 IN A 10.1.1.212' |
sort --debug -k5.8n
sort: using simple byte comparison
sort: leading blanks are significant in key 1; consider also specifying 'b'
sort: key 1 is numeric and spans multiple fields
esx01.example.com. 3600 IN A 10.1.1.212
____
ソートフィールドに下線を引く。これはあなたが期待するものではありません。-b
ソートでは、前のフィールドの終わりから始めて列を計算するため、必要です(マンページ:-t と -b の両方が有効でない場合、フィールドの文字は前のスペースの先頭から計算されます。):
$ ... | sort --debug -b -n -k5.8
sort: using simple byte comparison
sort: key 1 is numeric and spans multiple fields
esx01.example.com. 3600 IN A 10.1.1.212
___
分離する必要があります-n
。
$ ... | sort --debug -b -k5.8n
sort: using simple byte comparison
sort: leading blanks are significant in key 1; consider also specifying 'b'
sort: key 1 is numeric and spans multiple fields
sort: option '-b' is ignored
esx01.example.com. 3600 IN A 10.1.1.212
____
またはb
与えられたn
:
$ ... | sort --debug -k5.8nb
sort: using simple byte comparison
sort: key 1 is numeric and spans multiple fields
esx01.example.com. 3600 IN A 10.1.1.212
___
答え2
ソート(またはその他の項目)のフィールド仕様が活力を失い、構成、復号化、およびデバッグが困難になると、データの前処理がより効率的で明確になる可能性があります。
awk -F. '{print $NF"\t"$0}' | sort -snk1,1 | cut -f2-