括弧内の整数でファイルを並べ替える(スペースなし)

括弧内の整数でファイルを並べ替える(スペースなし)

私はこのようなファイルをソートしようとしています(サブルーチン名のリスト)。

cfn=(1370) __lib_file_MOD_file_open
fn=(1368) __universe_MOD_general_boot
fn=(916) __universe_MOD_general_main
fn=(6142) __grid_var_MOD_get_overlap
...

括弧内の整数に基づいています。初めて sort コマンドを試しました。

sort -t '=' -k 2 routine_list.txt

ただし、fn=(916) は出力の末尾に表示されます。

fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap
...
fn=(916) __universe_MOD_general_main

しかし、数値を昇順に並べ替えたい(916 - > 1368 - > 1370 - > ...)複数のコマンドまたはオプションを使用して比較的簡単にこれを実行できますか?

答え1

どうですか?

sort -nt'(' -k2 file.txt

テスト:

$ sort -nt'(' -k2 file.txt 
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap
  • -n数字で並べるという意味です。

  • t'('区切り文字を次のように設定します。(

  • -k2sort数字で始まり、行の終わりに移動する2番目のフィールドにキーを設定します。

答え2

この試み。区切り文字を = に設定し、文字 2 で始まるフィールド 2 を使用します ("(") 無視)。

sort -t= -k 2.2n file.txt
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap

でも

sort -t\( -k 2n <foo
fn=(916) __universe_MOD_general_main
fn=(1368) __universe_MOD_general_boot
cfn=(1370) __lib_file_MOD_file_open
fn=(6142) __grid_var_MOD_get_overlap

関連情報