![对括号内的整数(不带空格)的文件进行排序](https://linux22.com/image/68782/%E5%AF%B9%E6%8B%AC%E5%8F%B7%E5%86%85%E7%9A%84%E6%95%B4%E6%95%B0%EF%BC%88%E4%B8%8D%E5%B8%A6%E7%A9%BA%E6%A0%BC%EF%BC%89%E7%9A%84%E6%96%87%E4%BB%B6%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
我正在尝试对这样的文件进行排序(这是子例程名称的列表)
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 -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'('
将分隔符设置为(
-k2
将键设置为sort
第二个字段,即从数字开始到行尾。
答案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