用括号中的整数对文件进行排序,没有空格

roy*_*vib 9 sort files

我正在尝试对这样的文件进行排序(这是一个子程序名称列表)

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
...
Run Code Online (Sandbox Code Playgroud)

根据括号内的整数。我首先尝试排序命令

sort -t '=' -k 2 routine_list.txt
Run Code Online (Sandbox Code Playgroud)

但是 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
Run Code Online (Sandbox Code Playgroud)

但我希望数字按递增顺序排序(916 -> 1368 -> 1370 -> ...)是否可以通过使用多个命令或选项来相对简单地执行此操作?

hee*_*ayl 9

怎么样:

sort -nt'(' -k2 file.txt
Run Code Online (Sandbox Code Playgroud)

测试 :

$ 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
Run Code Online (Sandbox Code Playgroud)
  • -n 表示我们正在按数字排序

  • t'(' 将分隔符设置为 (

  • -k2将键设置sort为第二个字段,即从数字开始到行尾。


ste*_*eve 6

尝试这个。将分隔符设置为 =,然后从字符 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
Run Code Online (Sandbox Code Playgroud)

甚至

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
Run Code Online (Sandbox Code Playgroud)