[英]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.