(这个解决方案是用 PHP 编写的——但我想你可以直接从命令行使用 grep 或任何东西)
考虑到您的日期采用YYYY-MM-DD 格式,并且它们位于每行的开头,您只需按字母顺序比较各行即可比较日期。
一种解决方案是:
- 加载字符串
- 逐行分解
- 删除第一行
- 遍历行,只保留您感兴趣的行
对于第一部分:
$str = <<<STR
date,test,time,avail
2009-09-01,JS,0.119,99.90
2009-09-02,JS,0.154,99.89
2009-09-03,SWF,0.177,99.90
2009-09-04,SWF,0.177,99.90
2009-09-05,SWF,0.177,99.90
2009-09-06,SWF,0.177,99.90
2009-09-07,SWF,0.177,99.90
2009-09-08,SWF,0.177,99.90
2009-09-09,SWF,0.177,99.90
2009-09-10,SWF,0.177,99.90
STR;
$lines = explode(PHP_EOL, $str);
unset($lines[0]); // first line is useless
并且,要遍历行,过滤出/过滤出您想要/不想要的内容,您可以使用 foreach 循环... /p>
例如,你可以使用这样的东西:
$new_lines = array_filter($lines, 'my_filter');
var_dump($new_lines);
你的回调函数是:
function my_filter($line) {
$min = '2009-09-04';
$max = '2009-09-09';
if ($line >= $min && $line <= $max) {
return true;
} else {
return false;
}
}
结果:
array
4 => string '2009-09-04,SWF,0.177,99.90' (length=26)
5 => string '2009-09-05,SWF,0.177,99.90' (length=26)
6 => string '2009-09-06,SWF,0.177,99.90' (length=26)
7 => string '2009-09-07,SWF,0.177,99.90' (length=26)
8 => string '2009-09-08,SWF,0.177,99.90' (length=26)
希望这会有所帮助;-)
如果您的日期不是YYYY-MM-DD 格式,或者不在每一行的开头,您必须explode 行,并使用strtotime (或进行一些自定义解析,具体取决于格式),然后比较时间戳。
但是,在你的情况下......不需要所有这些;-)