首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell中管理日期

如何在shell中管理日期
EN

Stack Overflow用户
提问于 2011-09-23 22:21:25
回答 6查看 532关注 0票数 0

我有一个包含14000个日期的文件。我写了一个脚本来找出过去的5天,

代码语言:javascript
复制
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日到文件末尾的日期放在另一个文件中。

代码语言:javascript
复制
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)

这段代码应该这样做,但它有问题!为什么?

代码语言:javascript
复制
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
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-23 23:47:50

假设文件按日期-时间排序:

代码语言:javascript
复制
 sed -n '\.^02/04/2002.,$p' dates.list > results.list

从以02/04/2002开头的第一行打印到文件末尾。

票数 2
EN

Stack Overflow用户

发布于 2011-09-24 03:05:42

我自己还没有用过它,但是gawk命令(GNU的AWK)有manipulate date/time strings的能力。gawk是awk命令的Linux版本。

您还可以将整个程序重写为单个awk脚本。这可能会让事情变得容易得多。记住,awk是一种成熟的编程语言,它只是假定文件上有一个读取循环,并处理文件的每一行。

票数 0
EN

Stack Overflow用户

发布于 2011-09-24 03:46:27

通过编程,您可以像这样找到最后一天的第5天:

代码语言:javascript
复制
startdate=$( cut -d: -f1 filename | sort -u -t/ -k3 -k2 -k1 | tail -5 | head -1 )

然后,您可以打印大于或等于这一天的所有日期:

代码语言:javascript
复制
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 }
' filename
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7530484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档