免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3255 | 回复: 12
打印 上一主题 下一主题

请教:根据字符串中的子串对所有的整字符串进行排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-04 18:36 |只看该作者 |倒序浏览
5可用积分
本帖最后由 legone2008 于 2012-01-04 18:56 编辑

例如,已知在如下五个不同目录下分别放有类似于ne.yyyymmddhhmmss.txt的文件名, 我想把文件全路径进行排序,排序规则是按照文件名称的大小进行排序,输出的结果中要包含文件全路径,文件数量比较多,要考虑效率高一点的办法,请各位大师帮帮忙,谢谢:
   /A/B/ne.20120104120000.txt
    /opt/oracle/ne.20120104120001.txt
    /tmp/xxx/ne.20120104120002.txt
    /define/dir/ne.20120104120003.txt
    /other/dir/ne.20120104120004.txt

还要帮忙考虑一下通用性,比如,有的shell不支持数组, 我的环境一般都是solaris和suse,

我个人觉得可以用awk/nawk来实现,自己正在写,也期待更好的方法


   
   

最佳答案

论坛徽章:
0
2 [报告]
发表于 2012-01-04 18:36 |只看该作者
试试这个
  1. cd /;locate -r ne.[0-9]*.txt | sort -t. -k2,2
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-01-04 18:42 |只看该作者
/define/dir/20120104120003.txt
/other/dir/20120104120004.txt
还有前面不带ne的啊?

论坛徽章:
0
4 [报告]
发表于 2012-01-04 18:45 |只看该作者
写错了,不好意思,
   /A/B/ne.20120104120000.txt
    /opt/oracle/ne.20120104120001.txt
    /tmp/xxx/ne.20120104120002.txt
    /define/dir/ne.20120104120003.txt
    /other/dir/ne.20120104120004.txt

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
5 [报告]
发表于 2012-01-04 19:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2012-01-04 19:59 |只看该作者
回复 4# zooyo


    写得很精炼,说实话,我没有看懂, 不知道asorti是啥 东西,但在solaris下不能用,不过也非常感谢

-bash-3.00$ awk -F[/.] '{a[$(NF-1)]=$0}END{for(i=0;i++<asorti(a,b)print a[b]}' file
awk: syntax error near line 1
awk: illegal statement near line 1
awk: illegal statement near line 1
awk: illegal statement near line 1
-bash-3.00$ nawk -F[/.] '{a[$(NF-1)]=$0}END{for(i=0;i++<asorti(a,b)print a[b]}' file
nawk: trying to access field -1
input record number 6, file file
source line number 1
-bash-3.00$

论坛徽章:
0
7 [报告]
发表于 2012-01-04 20:02 |只看该作者
回复 5# yangkyo821


    这个方法比较好,还不知道sort有这功能,但如果目录中有的含有符号".", 有的没".",这个就要出错了,我试着优化下吧

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2012-01-04 20:40 |只看该作者
回复 6# legone2008


Solaris里面试试/usr/xpg4/bin/awk

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
9 [报告]
发表于 2012-01-05 08:25 |只看该作者
Shell_HAT 发表于 2012-01-04 20:40
回复 6# legone2008

Solaris里面试试/usr/xpg4/bin/awk


Solaris 的这个awk 是不支持asorti, 这个需要GNU awk支持的。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
10 [报告]
发表于 2012-01-05 08:43 |只看该作者
本帖最后由 rdcwayx 于 2012-01-05 08:45 编辑

自己先确认一下ne*.txt 文件所在目录是否有目录含. 字符。

还有sort 命令按数字排序,别忘了n 参数
  1. find  / -type f -name "ne.*.txt" |sort -t. -k2,2n
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP