忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 574 | 回复: 10

[文本处理] PowerShell - 文件名排序 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-16 22:55 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-17 11:30 编辑

如何按照文件的基本名称的数值大小进行排序?



额外的排序规则,不知道能否实现:
基础排序规则依然是按照文件的基本名称的数值进行排序 (如果文件的基本名称中包含非数字字符 忽略该字符)
额外规则一、
在基础排序规则的基础上,增加对扩展名的排序 (请注意:排序时忽略扩展名中非数字字符)
(用扩展名中的第一个数字字符 按照数值的大小进行降序排序),若扩展名的第一个字符相同 则按照扩展名的长度进行排序 (计算长度时同样忽略非数字字符)

额外规则二、
在基础排序规则的基础上,增加对扩展名的排序 (请注意:排序时忽略扩展名中非数字字符)
用扩展名中的第一个数字字符与最后一个数字字符的差 进行降序排序。
若扩展名仅包含一个字符,如: 18.2
按照扩展名第一个字符为 2, 最后一个字符为 2 处理。




论坛徽章:
0
发表于 2017-07-17 09:09 |显示全部楼层
基本名称的数值大小怎么理解?能不能举个例子。
或者你想要的效果是这样?
find . -type f|sort

论坛徽章:
105
ChinaUnix元老
日期:2015-02-02 08:55:39CU十二周年纪念徽章
日期:2015-02-02 08:55:50午马
日期:2014-04-30 10:30:44双子座
日期:2013-08-20 08:22:52双鱼座
日期:2013-08-20 17:47:58丑牛
日期:2013-09-13 13:10:45水瓶座
日期:2013-09-13 21:15:33寅虎
日期:2013-09-25 11:23:51戌狗
日期:2013-09-26 13:21:25丑牛
日期:2013-09-26 14:23:42亥猪
日期:2013-09-27 17:42:00亥猪
日期:2013-09-27 17:45:14
发表于 2017-07-17 09:38 |显示全部楼层
什么叫做基本名称?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-17 10:18 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-17 11:08 编辑

回复 2# beauty2003
我将示例图片放到顶楼。

论坛徽章:
0
发表于 2017-07-17 12:35 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-07-17 12:37 编辑

1 "/root/abc.txt" 的基本名,就是abc

2 dir将返回一组文件目录名。

3 每个对象(不光文件),都可以看作一条sql记录。每个属性,可以看成是这个元素的字段名。

4 排序时,可以根据多个字段排序。如 dir  /abc  | sort-object @{name=字段名1 ; 顺序=升序,name=字段名2 ; 顺序=降序}  。
我就不多废话了,具体看这里:
  https://msdn.microsoft.com/en-us ... utility/sort-object

5 排序的原则,是根据属性的类型。字符串就用字符串排序。数字就用数字排序。

6 顺序=“升序” 。这里的升序,是字符串。也可以是:顺序={代码},顺序={函数名}。来达到自定义排序。

7 很多时候,都是用【 xxx | 自编函数】,来实现自定义过滤。这个自编函数,名叫【过滤器】或【筛选器】
Filter xxx
{
你的代码,可以进行任意筛选规则。
}








论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-17 13:52 |显示全部楼层
回复 5# 本友会机友会摄友会
谢大神帮忙指点,但还有一个问题不知如何解决:


以上是排序后的结果,代码如下:
  1. $list = Get-ChildItem

  2. $list | Sort-Object -Property @{
  3.     Expression = {
  4.         [int](([string]$_.BaseName) -replace "\D")
  5.     }
  6. }, @{
  7.     Expression = {
  8.         $ext = ([string]$_.Extension) -replace "\D"
  9.         [int]$ext[0]
  10.         # Codes here...
  11.      }
  12.      Descending = $true
  13. }
复制代码

如何解决在扩展名的第一个数字字符相同的情况下,再比较扩展名的长度。


论坛徽章:
0
发表于 2017-07-17 14:12 |显示全部楼层
看不到图。
如何解决在扩展名的第一个数字字符相同的情况下,再比较扩展名的长度。---说实话,我从没听说过这个需求,是不有点高啊?
不是常用的,就没法抽象,没人提前,已经,给你做好,那么就意味着你自己造轮。
if  ($_.Extension.length -lt 123)  不就是扩展名长度吗?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-17 14:29 |显示全部楼层
回复 7# 本友会机友会摄友会
排序后的结果,如下:
Mode                LastWriteTime     Length Name                                                                                                                       
----                -------------     ------ ----                                                                                                                       
-a---         2017/7/17     11:10          0 2.5                                                                                                                        
-a---         2017/7/17     11:10          0 2.a4                                                                                                                       
-a---         2017/7/17     11:10          0 a0b5.100                                                                                                                  
-a---         2017/7/17     11:10          0 18.2                                                                                                                       
-a---         2017/7/17     11:10          0 18.2111                                                                                                                    
-a---         2017/7/17     11:10          0 199.5004                                                                                                                  
-a---         2017/7/17     11:10          0 199.301                                      

这样可以吗?

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-17 14:55 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-17 16:14 编辑

问题已经解决了。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-07-17 15:30 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-07-17 15:39 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. print(join('.', @$_)) for
  5. sort {
  6.     my @exa = $a->[-1] =~ /\d/g;
  7.     my @exb = $b->[-1] =~ /\d/g;
  8.     $a->[0] =~ s/\D//gr <=> $b->[0] =~ s/\D//gr
  9.     or
  10.     $exb[0] <=> $exa[0]
  11.     or
  12.     $#exb <=> $#exa
  13. }
  14. map {[split(/\./)]} <DATA>

  15. __DATA__
  16. 2.5
  17. 2.a4
  18. a0b5.100
  19. 18.2
  20. 18.2111
  21. 199.5004
  22. 199.301
复制代码

perl abc.pl
-----------------------
2.5
2.a4
a0b5.100
18.2111
18.2
199.5004
199.301













您需要登录后才可以回帖 登录 | 注册

本版积分规则

10张SACC2017门票等你来拿~

在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧 +” 的概念正在深入到各行各业,提升企业效率,释放商业潜能,创造全新机遇。作为国内顶级技术盛会之一,2017 中国系统架构师大会(SACC2017)将于 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。今年,大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年10月19日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP