LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1475|回复: 16

如何列出指定时间段内的文件?

[复制链接]
发表于 2006-3-8 13:50:31 | 显示全部楼层 |阅读模式
文件都是20060108这种格式的文件名

比如列出所有的20040812~20060308这段日期的所有文件,

怎么用通配符啊?

谢谢!
发表于 2006-3-8 14:03:09 | 显示全部楼层

  1. ls | awk '{if($0>=20040812 && $0<=20060308) print $0}'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-8 14:11:53 | 显示全部楼层
哦,谢谢,不过如果结果有200个文件,进一步的处理可能就不被允许了

比如 ls|awk '{if $0 >20040101 && $0 < 20060108 print $0}'|awk '{print $1}'

能用通配符做玛?
回复 支持 反对

使用道具 举报

发表于 2006-3-8 14:28:36 | 显示全部楼层
你是说还要输出每个文件中第一个域的内容是吗?可以的
试试这个:

  1. ls | awk '{if($0>=20040812 && $0<=20060308) print $0}' | xargs awk '{print $1}'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-8 15:02:39 | 显示全部楼层
ls | awk '{if($0>=20040812 && $0<=20060308) print $0}' | xargs cat|sort|xargs uniq -c

这个就不行了:ask
回复 支持 反对

使用道具 举报

发表于 2006-3-8 15:05:42 | 显示全部楼层
当让不行了,具体讲一下,你要做的是什么吧?
回复 支持 反对

使用道具 举报

发表于 2006-3-8 15:06:13 | 显示全部楼层
用regex的匹配表示的话,将相当吓人:(纯是做匹配练习了)
  1. 200(4(0(8(1[2-9]|2[0-9]|3[01])|9([0-2][1-9]|3[01]))|1[0-2]([0-2][1-9]|3[01]))|5(0[1-9]|1[0-2])([0-2][1-9]|3[01])|60(1([0-2][1-9]|3[01])|2([01][1-9]|2[0-8])30[1-8])
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-8 15:12:01 | 显示全部楼层
系统每日生成两个个文件,存在两个目录中,dira和dirb.
dira存放系统发信信息,dirb存放系统收信信息。
每个文件用一行来记录一条信息,格式如下:
姓名1 信息
姓名2 信息
文件名就是日期,比如20040807。
现在我要生成一个指定日期的文件到标准输出。
格式如下:
姓名  接受信息条数  发送信息条数

现在我只需要传文件名的集合到我的处理程序就OK了。

现在就是缺乏类似mysql中的to_days和from_days类似的函数。
回复 支持 反对

使用道具 举报

发表于 2006-3-8 15:21:37 | 显示全部楼层

  1. ls | awk '{if($0>=20040812 && $0<=20060308) print $0}' | xargs awk '{print $1}' |sort |uniq -c
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-8 15:31:20 | 显示全部楼层
而且

if($0>=20040812 && $0<=20060308)

句不能工作
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表