对括号中带整数且无空格的文件进行排序


8

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

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-> ...)是否可以使用几个命令或选项相对简单地完成此操作?


...任何关系
mikeserv

@mikeserv我最喜欢的字符-> 唱歌的 向日葵 ->太阳->频谱:)
roygvib

Answers:


8

怎么样:

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为第二个字段,即从数字开始到行尾。


oooooh附加-n可以工作...我阅读了手册页并尝试了-n之前,但是当时不起作用...但是现在上面的组合可以完美地工作了。非常感谢:)
roygvib 2015年

@roygvib我会建议你使用(作为分隔符,而不是=因为如果你使用(则排序可以从第二场的新起点数值开始..
heemayl

是的,最好使用'('而不是'='。我记得我曾尝试同时使用'('和')'作为定界符,但没有成功,因此放弃了使用括号...
roygvib

5

尝试这个。将定界符设置为=,然后使用从字符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

1
嗯..这也按预期工作。很高兴知道某些字符可以跳过。非常感谢:)
roygvib 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.