間に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

文字4(この機能)からフィールドの終わりまでの2番目のフィールドをソートキーとして使用し、-k2.4,2n入力をそのキー(最後のキー)に基づいて数字でソートするように指示します。数字で並べ替えるにはsort.4nみんな2番目のフィールドはを使用します-k2,2n。我々は-t ':'フィールドがコロンで区切られたと述べた。

コマンドを実行すると(--debugここにGNUとOpenBSDの両方が表示されますsort)、正しい数字でソートされていることがわかります。sort

$ 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]'

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

関連情報