Назад | Перейти на главную страницу

как управлять датами в оболочке

выделенный текст У меня есть файл, содержащий 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)

Если вы можете использовать внешний вспомогательный инструмент, попробуйте 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

Есть несколько способов сделать это: 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, ...