これはテキスト ファイルの例です。
195.92.211.47:21029:400
195.92.211.48:21023:400
ファイルの行を 2 列目の最後の 2 桁で並べ替えるにはどうすればよいでしょうか。2 列目は常に 5 桁です。
答え1
2 番目:
の - 区切りフィールドには常に 5 桁の数字が含まれていると仮定します。
$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400
は、2番目のフィールドの4文字目以降(これが何を意味するか)からフィールドの最後までをソートキーとして使用し、そのキー(末尾の)に基づいて入力を数値的にソートするように-k2.4,2n
指示します。sort
.4
n
全体2 番目のフィールドでは、 を使用します-k2,2n
。-t ':'
フィールドはコロンによって区切られるとよく言われます。
次のコマンドを実行すると、ソートに正しい数値が使用されていることがわかります--debug
(ここでは GNUsort
とsort
OpenBSD の両方を示しています)。
$ gsort --debug -t ':' -k2.4,2n file
gsort: text ordering performed using simple byte comparison
195.92.211.48:21023:400
__
_______________________
195.92.211.47:21029:400
__
_______________________
$ sort --debug -t ':' -k2.4,2n file
Memory to be used for sorting: 2139060224
sort_method=heapsort
; k1=<23>, k2=<29>; s1=<195.92.211.48:21023:400>, s2=<195.92.211.47:21029:400>; cmp1=-1
195.92.211.48:21023:400
195.92.211.47:21029:400
答え2
使用sort -t: -nk2.4
-t uses the delimiter :
-n for numerical sort
-k your key is the second column
重要な定義は で非常にわかりやすく説明されていますinfo sort
。
'-k POS1[,POS2]'
'--key=POS1[,POS2]'
POS1とPOS2の間の行の部分(POS2が省略されている場合は行の末尾)で構成されるソートフィールドを指定します。 包括的。
各 POS は 'F[.C][OPTS]' という形式です。ここで、F は使用するフィールドの番号、C はフィールドの先頭から最初の文字の番号です。フィールドと文字の位置は 1 から番号が付けられます。POS2 の文字位置が 0 の場合は、フィールドの最後の文字を示します。POS1 から '.C' を省略すると、デフォルトで 1 (フィールドの先頭) になります。POS2 から省略すると、デフォルトで 0 (フィールドの末尾) になります。OPTS は順序付けオプションで、個々のキーを異なるルールに従って並べ替えることができます。詳細については、以下を参照してください。キーは複数のフィールドにまたがることができます。
例: 2 番目のフィールドで並べ替えるには、'--key=2,2' ('-k 2,2') を使用します。キーに関する詳細な注意事項とその他の例については、以下を参照してください。並べ替えに使用されている行の部分を特定するには、'--debug' オプションも参照してください。