繁体   English   中英

您如何遍历特定日期范围

[英]how do you through loop a certain date range

我在目录中有基于日期的文件,但显然没有日期戳。

File_yyyymmdd_record.log

这些在目录中放置了数年的时间。 现在,如果这些只是简单的数字,我要做的就是得到差价并增加计数器以推动价值

var=substring( File_yyyymmdd_record.log ) /* get the yyyymmdd part */
var2=substring( File2_yyyymmdd_record.log ) /* get the yyyymmdd part */
delta=var2-var1
set i=delta and loop through to get the values for all these recordID's ( record ID    is the yyyymmdd part ) 

问题是,如果我在目录中有2个不同的月份,也有年份,例如20131210和20140110,差异将不会给该目录中的所有recordID,因为当它溢出到下个月时,纯数字计算不适用-它应该是基于日期的计算。 我想做的是在shell中使用2个输入参数

 shell.sh recordID1 recordID2

根据这些信息,它会找到所有记录并将它们存储在某个位置,并循环遍历每条记录作为这样的输入

find <dir> -iname recordID* ...<some awk and sed here> |
   while read recordID ;
   do <stuff >
   done

无论如何,这尤其可以在2个上下文中实现-首先是日期计算部分,另一个是存储这些recordID,以便我可以循环浏览它们。 也许回音它们到一个tmp文件是什么。

对于日期计算部分,我尝试了这一点,并且可以正常工作。 但不确定是否会在某些时间/情况下动摇

echo $((($(date -u -d 2010-04-29 +%s) - $(date -u -d 2010-03-28 +%s)) / 86400))

因此,给定recordID1为20100328,我有32天的recordID在该目录中查找。 您必须将日期从recordID1提前32天,并将它们存储在某个位置。 如何最好地完成所有这些工作。

这样的事情应该做:

s=20130102 # start date
e=20130202 # end date

sep=$(date +"%s" -d"$s") # conv to epoch
eep=$(date +"%s" -d"$e")
for f in *.log; do
    d=$(date +"%s" -d$(sed -n 's/^[^_]*_\([^_]*\)_[^_]*.log/\1/p' <<< "$f"))
    if [ "$d" -ge "$sep" ] && [ "$d" -le "$eep" ]; then
        echo $f
    fi
done

我的意思是,您需要找出文件名在20131210和20140110之间的日志文件。 (无需转换为纪元时间)

#! /usr/bin/bash

sep=20131210 
eep=20140110 

find /DIR -type f -name "*.log" |while read file
do
  d=${file:5:8}
  if [ "$d" -ge "$sep" ] && [ "$d" -le "$eep" ]; then
     do <stuff >
  fi
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM