我有一个包含14000个日期的文件。我写了一个脚本来找出过去的5天,
26/03/2002:11:52:25
27/03/2002:11:52:25
29/03/2002:11:30:41
30/03/2002:11:30:41
26/03/2002:11:30:41
02/04/2002:11:30:41
03/04/2002:11:30:41
04/04/2002:11:30:41
05/04/2002:11:52:25
06/04/2002:11:52:25假设这就是文件,现在我将date 02/04/2002:11:30:41作为输出。我想把2002年2月4日到文件末尾的日期放在另一个文件中。
start-date = 02/04/2002 (this is my start date)
while [start-date lt end-date] do (while start date is less than end date )
start-date++ ( add one day to start day so if its 2/4/2002 it will become 3/4/2002)
echo $start-date|tee -a file1 (put it in a file)这段代码应该这样做,但它有问题!为什么?
grep -n $SDATE thttpd.log | cut -d: -f1 (pattern=$SDATE)
sed '/$SDATE/=' thttpd.log
awk '/$SDATE/{ print NR }' thttpd.log
$ sed -n "$(awk '$SDATE/ { print NR }' input),$ p" thttpd.log
$ awk 'NR >= line_number' line_number=$(grep -n $SDATE -m 1 thttpd.log | cut -d: -f1) thttpd.log发布于 2011-09-23 23:47:50
假设文件按日期-时间排序:
sed -n '\.^02/04/2002.,$p' dates.list > results.list从以02/04/2002开头的第一行打印到文件末尾。
发布于 2011-09-24 03:05:42
我自己还没有用过它,但是gawk命令(GNU的AWK)有manipulate date/time strings的能力。gawk是awk命令的Linux版本。
您还可以将整个程序重写为单个awk脚本。这可能会让事情变得容易得多。记住,awk是一种成熟的编程语言,它只是假定文件上有一个读取循环,并处理文件的每一行。
发布于 2011-09-24 03:46:27
通过编程,您可以像这样找到最后一天的第5天:
startdate=$( cut -d: -f1 filename | sort -u -t/ -k3 -k2 -k1 | tail -5 | head -1 )然后,您可以打印大于或等于这一天的所有日期:
awk -F: -v start="$startdate" '
BEGIN { split(start, s, "/"); sdate=s[3] s[2] s[1] }
{ split($1, d, "/"); if (d[3] d[2] d[1] >= sdate) print }
' filenamehttps://stackoverflow.com/questions/7530484
复制相似问题