帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Shell  dates  MAN  日期  


问题:

强调textI有一个包含 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



假设这是文件,现在我将日期 02/04/2002: 11: 30: 41: 作为输出。 我想把日期从02/04/2002到另一个文件的结尾。


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)




回答 1:

有一些方法可以做到这一点: ,sed,awk,。

可以通过下列方法之一获取匹配的Pattern的行号:

  • grep -n pattern -m 1 input | cut -d: -f1
  • awk '/pattern/{ print NR }' input | head -1

然后从那一行打印到 file:的末尾

  • $ sed -n"$(awk '/02/04/2002:11:30:41/{ print NR }' input | head -1),$ p" input

或者:

  • $ awk 'NR> = line_number' line_number=$(grep -n 02/04/2002:11:30:41 -m 1 input | cut -d: -f1) input

你也可以使用 grep -A ( --after-context ) 或者 tail


回答 2:

如果你可以使用外部 helper 工具,请尝试 dateutils。 它带有一个 dgrep 命令,它可以执行你想要的操作:


dgrep '>=2002-04-02' -i '%d/%m/%Y' <yourfile


=>


 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






文章标签:MAN  日期  Shell  dates  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语