如何在shell中pipe理date

强调textI有一个文件包含14000date。 我写了一个脚本find最近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 

假设这是文件,现在我有date02/04/2002:11:30:41作为输出。 我想把从2002年4月2日到文件末尾的date放在另一个文件中。

 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,sed,awk,…

您可以通过以下方式之一获取匹配模式的行号:

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

并从该行打印到文件的末尾:

  • $ 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 ,…

如果您可以使用外部帮助工具,请尝试使用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