LinuxGem
我们一起去探寻 Linux 的宝藏吧!
whohas -- 查询软件包在各个发行版仓库的情况

根据字符串长度排序

galeki posted @ 2008年12月06日 18:09 in Bash 和它的朋友们 with tags 排序 bash , 1599 阅读
Evilvte -- VTE 最轻量终端

sort 命令可以按照字母或者数字顺序排列字符串,不过如果我们想根据字符串的长度来排序呢?

配合一点点 awk 魔法,就可以达成愿望。建立一个 lsort 文件,内容如下:

#! /bin/sh
awk 'BEGIN { FS=RS } { print length, $0}' $* |
sort +0n -1 |
sed 's/^[0-9][0-9]* //'

首先,awk 把标准输入中每行的前面,都加上这行的长度,然后传给 sort 对长度数字进行排序,最后用 sed 把长度数字删掉。

保存之后,加上可执行标记,就可以拷贝到 /usr/bin 之下,来使用了。

比如,我想看看以 a 开头的最长的单词是哪个,那么输入:

$  look a | lsort

look a 会将所有 a 大头的单词按照字幕顺序显示出来,经过 lsort 的过滤,最后的就是最长的单词了:

...
appendorontgenography
anatomicophysiological
aquopentamminecobaltic
anthropomorphologically
$

1
回复
ai 说:
2008年12月07日 05:30

不错

2
回复
ibear 说:
2008年12月09日 12:56

字符串也可以是数字开头,需要修正一下:)

3
回复
shili 说:
2008年12月10日 04:39

@ibear: 可以排序数字字符串 :)

4
回复
chroot 说:
2008年12月10日 10:44

数字开头没问题,用 cut -d' ' -f2- 代替后面那个 sed 也可以。

5
回复
soooh 说:
2008年12月24日 21:17

cut确实方便一些


* 登录
*

simple_captcha.jpg
(输入验证码)