文件内的排序问题

sh/bash/dash/ksh/zsh等Shell脚本
Schumacher
帖子: 21
注册时间: 2006-07-05 16:12

文件内的排序问题

#1

帖子 Schumacher » 2012-03-06 11:11

有个文件club_member,内容如下:

代码: 全选

[demo@host-6-81 ~]$ cat club_members
Pam Murray      4    657-4324  18
Jim Brown       8    467-8743  22
Jim Roberts     17   728-8295  9
Joyce Murray    7    235-1432  13

现在要根据最后一个field排序(18, 22, 9,13),sort 选项试了几个都没有用,求助。
上次由 Schumacher 在 2012-03-06 11:28,总共编辑 1 次。
帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。
头像
鲍尔默
帖子: 162
注册时间: 2011-04-26 23:39

Re: 文件内的排序问题

#2

帖子 鲍尔默 » 2012-03-06 11:22

代码: 全选

sort -t ' ' -k 5 -n
Schumacher
帖子: 21
注册时间: 2006-07-05 16:12

Re: 文件内的排序问题

#3

帖子 Schumacher » 2012-03-06 11:27

试过了,没效果。

代码: 全选

[demo@host-6-81 ~]$ sort -t ' ' -k 5 -n club_members >s3
[demo@host-6-81 ~]$ cat s3
Pam Murray      4    657-4324  18
Joyce Murray    7    235-1432  13
Jim Brown       8    467-8743  22
Jim Roberts     17   728-8295  9
帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。
头像
鲍尔默
帖子: 162
注册时间: 2011-04-26 23:39

Re: 文件内的排序问题

#4

帖子 鲍尔默 » 2012-03-06 11:29

代码: 全选

>0< ~$ cat <<EOF | sort -t ' ' -k 5 -n
> Pam Murray 4 657-4324 18
> Jim Brown 8 467-8743 22
> Jim Roberts 17 728-8295 9
> Joyce Murray 7 235-1432 13
> EOF
Jim Roberts 17 728-8295 9
Joyce Murray 7 235-1432 13
Pam Murray 4 657-4324 18
Jim Brown 8 467-8743 22

>0< ~$
Schumacher
帖子: 21
注册时间: 2006-07-05 16:12

Re: 文件内的排序问题

#5

帖子 Schumacher » 2012-03-06 11:39

这个问题实际上是一道题:

Sort the file club_members numerically by meetings attended (this is the last field). Send the output to file s3

能用一个shell命令搞定就好了。
帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 文件内的排序问题

#6

帖子 自由建客 » 2012-03-06 11:55

你那有制表符!别用 -t ' ',直接用 sort -k 5 -n 就行了!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 文件内的排序问题

#7

帖子 lilydjwg » 2012-03-06 13:26

[bash]ghc -e 'import Data.Function' -e 'import List' -e 'getContents >>= putStr.unlines.(sortBy (compare `on` ((read::String->Int).last.words))).lines'[/bash]
Schumacher
帖子: 21
注册时间: 2006-07-05 16:12

Re: 文件内的排序问题

#8

帖子 Schumacher » 2012-03-06 14:40

解决了,谢谢楼上诸位的帮忙。

代码: 全选

[demo@host-6-113 ~]$ sort -k 5 -n club_members >s3
[demo@host-6-113 ~]$ cat s3
Jim Roberts     17   728-8295  9
Joyce Murray    7    235-1432  13
Pam Murray      4    657-4324  18
Jim Brown       8    467-8743  22
帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 文件内的排序问题

#9

帖子 lilydjwg » 2012-03-06 15:01

Schumacher 写了:解决了,谢谢楼上诸位的帮忙。

代码: 全选

[demo@host-6-113 ~]$ sort -k 5 -n club_members >s3
[demo@host-6-113 ~]$ cat s3
Jim Roberts     17   728-8295  9
Joyce Murray    7    235-1432  13
Pam Murray      4    657-4324  18
Jim Brown       8    467-8743  22
来个有中间名的就完了。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: 文件内的排序问题

#10

帖子 自由建客 » 2012-03-06 15:02

lilydjwg, 人家是作业题!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 文件内的排序问题

#11

帖子 lilydjwg » 2012-03-06 15:08

自由建客 写了:lilydjwg, 人家是作业题!
国内的课程作业?没见过用 shell 解的呢。。
Schumacher
帖子: 21
注册时间: 2006-07-05 16:12

Re: 文件内的排序问题

#12

帖子 Schumacher » 2012-03-06 15:22

http://linuxzoo.net/

这题是linuxzoo.net上面的题目,这个网站提供虚拟机环境和一些小题目,可以练习linux系统管理,ssh到它的虚拟机上,做题目,可以查对错,还不错。
帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: 文件内的排序问题

#13

帖子 Think1st » 2012-03-08 18:02

lilydjwg 写了:
Schumacher 写了:解决了,谢谢楼上诸位的帮忙。

代码: 全选

[demo@host-6-113 ~]$ sort -k 5 -n club_members >s3
[demo@host-6-113 ~]$ cat s3
Jim Roberts     17   728-8295  9
Joyce Murray    7    235-1432  13
Pam Murray      4    657-4324  18
Jim Brown       8    467-8743  22
来个有中间名的就完了。
稍微解决一下,这样子?

代码: 全选

cat club_members | sed -e 's/ \{2,\}/\t/g' | sed -e 's/\t\{2,\}/\t/g' | sort -t $'\t' -k4 -n
在这里,问题比答案更抢手。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 文件内的排序问题

#14

帖子 fnan » 2012-03-10 4:26

哪有名字总是两个域的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 文件内的排序问题

#15

帖子 lilydjwg » 2012-03-10 12:58

其实,这个在 vim 中很简单,

代码: 全选

:sort nr /\d\+$/
回复