3 つの列が区切られたテキスト ファイルがあります。2 番目の列を列 2 の最後の 2 桁で並べ替えるにはどうすればよいでしょうか?

3 つの列が区切られたテキスト ファイルがあります。2 番目の列を列 2 の最後の 2 桁で並べ替えるにはどうすればよいでしょうか?

これはテキスト ファイルの例です。

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.4n全体2 番目のフィールドでは、 を使用します-k2,2n-t ':'フィールドはコロンによって区切られるとよく​​言われます。

次のコマンドを実行すると、ソートに正しい数値が使用されていることがわかります--debug(ここでは GNUsortsortOpenBSD の両方を示しています)。

$ 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' オプションも参照してください。

関連情報