Найти записи, представленные до сегодняшнего дня

как найти рекордные данные о сильфонах с «Последней датой» до сегодняшней даты. т.е.: если сегодня дата 09-04-2014, то поиск записи с «Последней датой» до 09-04-2014

Email ID : abc@domain.com Last Date : 30-04-2014 -- Email ID : abc@domain.com Last Date : 18-03-2014 -- Email ID : abc@domain.com Last Date : 18-02-2013 -- Email ID : abc@domain.com Last Date : 18-05-2015 -- Email ID : abc@domain.com Last Date : 01-05-2012 -- Email ID : abc@domain.com Last Date : 09-04-2014 

Ожидаемый результат:

 Email ID : abc@domain.com Last Date : 18-03-2014 -- Email ID : abc@domain.com Last Date : 18-02-2013 -- Email ID : abc@domain.com Last Date : 01-05-2012 

3 Solutions collect form web for “Найти записи, представленные до сегодняшнего дня”

Один из способов – с Perl. Мы читаем фрагменты вашего ввода, установив разделитель входных данных на «-», как вы можете предположить. Мы переформатируем дату «День-месяц-год» в форму, которую мы можем численно сравнить; а именно YYYYMMDD. В общем и целом:

 #!/usr/bin/env perl use strict; use warnings; my @t = localtime(); my $today = sprintf( "%04d%02d%02d", $t[5] + 1900, $t[4] + 1, $t[3] ); local $/ = "--"; #...record separator... while (<>) { if (m{Last Date : (\d\d)-(\d\d)-(\d\d\d\d)}) { my $then = sprintf( "%04d%02d%02d", $3, $2, $1 ); print if ( $then < $today ); } } 1; 

Предполагая, что вы на самом деле сценарий «myfilter», вы можете выполнить, передав вам входные данные в программу или просто выполните:

 $ myfilter inputdata 

Не так элегантно, как решение Perl, но то же самое можно сделать с Awk по существу тем же алгоритмом:

 BEGIN{ FS = " : |\n" RS = "--\n?"; Padding = " 00 00 00"; Today = mktime(strftime("%Y %m %d") Padding); } { Last_date = gensub(/([0-9]{2})-([0-9]{2})-([0-9]{4})/, "\\3 \\2 \\1", "g", $4); if (mktime(Last_date Padding) < Today) { sub(/\n$/, "", $0); print Sep $0; Sep = "--\n" } } 

Вот еще одно решение perl :

 $ perl -MTime::Local -nle ' BEGIN { $/ = "--" } ($dd,$mm,$yy) = (localtime)[3..5]; $today = timelocal(0,0,0,$dd,$mm,$yy); $h{$1} = $_ if /Last Date : (.*)$/; END { print $h{$_} for grep { ($d,$m,$y)=split "-",$_; timelocal(0,0,0,$d,$m-1,$y) < $today; } keys %h }' file 

Здесь я использую timelocal() основного модуля Time::Local для преобразования даты в эпоху, она будет обрабатывать случай, когда дата ввода недействительна.

  • Команда вырезания не извлекает поля правильно в выровненных столбцах
  • Сравнить 2 столбца в 2 разных файлах
  • Как переносить текстовый файл на основе символов
  • Как я могу напечатать условный заголовок до начала stdout, если есть какой-либо вывод на stdout
  • Добавление значений столбца с одинаковым идентификатором данных?
  • Вставить одноколоночные файлы с одинаковым именем, используя имя каталога в качестве имени столбца
  • Как выполнить эту команду оболочки из Python?
  • вырезать столбец 2 из текстового файла
  • Извлечение определенных строк набора, соответствующих правилу
  • Замена шаблона в строке, предшествующей другому интересующему образцу
  • Чтение десятичных знаков в текстовом файле в 1D-массив
  • Заменить дату с текущей датой
  • Linux и Unix - лучшая ОС в мире.