免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2734 | 回复: 6

文本处理:如何去除上级目录,用sed [复制链接]

论坛徽章:
0
发表于 2010-05-28 20:43 |显示全部楼层
D:\Temp\test
D:\Temp\test1
D:\Temp\test2
D:\Temp\test\a
D:\Temp\test\b
D:\Temp\test1\aaa
D:\Temp\test1\bbb
D:\Temp\test1\aaa\aadf
D:\Temp\test1\bbb\aaa
D:\Temp\test2\ad
D:\Temp\test2\23
D:\Temp\test2\23\a32

假如有以上文件列表,只保留最后一层子目录,其余的上级目录都不要,希望得到以下结果:
D:\Temp\test\a
D:\Temp\test\b
D:\Temp\test1\aaa\aadf
D:\Temp\test1\bbb\aaa
D:\Temp\test2\ad
D:\Temp\test2\23\a32

请教如何处理?

论坛徽章:
0
发表于 2010-05-28 20:53 |显示全部楼层
本帖最后由 黑色阳光_cu 于 2010-05-28 20:54 编辑

一定要用SED?

论坛徽章:
0
发表于 2010-05-28 20:55 |显示全部楼层

论坛徽章:
0
发表于 2010-05-28 20:56 |显示全部楼层
一定要用SED?
黑色阳光_cu 发表于 2010-05-28 20:53



不是的,随便用什么,关健是达到目的,呵呵

论坛徽章:
0
发表于 2010-05-28 21:58 |显示全部楼层
本帖最后由 黑色阳光_cu 于 2010-05-28 22:00 编辑

  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. my $root = {_path => undef};
  5. while (defined(my $path = <DATA>))
  6. {
  7.         chomp($path);
  8.         my @fields = split(/\\+/, $path);
  9.         my $prefix = $root;
  10.         for (my $n = 0; $n <= $#fields; $n++)
  11.         {
  12.                 if (not exists $prefix->{$fields[$n]})
  13.                 {
  14.                         $prefix->{$fields[$n]} = {_path => $path};
  15.                 }
  16.                
  17.                 $prefix = $prefix->{$fields[$n]};
  18.         }
  19. }

  20. my @deep_path = &find_deep_path($root);
  21. print join("\n", @deep_path);

  22. ####################################################################################

  23. sub find_deep_path
  24. {
  25.         my ($root) = @_;
  26.         my @deep_path;

  27.         if (scalar(keys(%{$root})) == 1)
  28.         {
  29.                 push(@deep_path, $root->{_path});
  30.         }
  31.         else
  32.         {
  33.                 delete $root->{_path};
  34.                 foreach my $child (keys(%{$root}))
  35.                 {
  36.                         push(@deep_path, &find_deep_path($root->{$child}));
  37.                 }
  38.         }

  39.         return @deep_path;
  40. }

  41. __DATA__
  42. D:\Temp\test
  43. D:\Temp\test1
  44. D:\Temp\test2
  45. D:\Temp\test\a
  46. D:\Temp\test\b
  47. D:\Temp\test1\aaa
  48. D:\Temp\test1\bbb
  49. D:\Temp\test1\aaa\aadf
  50. D:\Temp\test1\bbb\aaa
  51. D:\Temp\test2\ad
  52. D:\Temp\test2\23
  53. D:\Temp\test2\23\a32
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
发表于 2010-05-29 13:32 |显示全部楼层
mark

论坛徽章:
18
巳蛇
日期:2014-12-03 08:27:5115-16赛季CBA联赛之吉林
日期:2016-04-18 15:24:24qiaoba
日期:2016-06-17 17:41:1615-16赛季CBA联赛之八一
日期:2016-06-20 15:13:1415-16赛季CBA联赛之广夏
日期:2016-06-29 10:38:28极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之吉林
日期:2017-03-06 13:47:55
发表于 2010-05-29 13:38 |显示全部楼层
  1. sort -u urfile|sed 'N;/^\(.\+\)\n\1/!P;D'
复制代码
黑哥的。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP