grep текст с датами, старше 30 дней, в файл и переместить в другой файл

Вопрос или проблема

скрипт unix для поиска текста с датами, которые на 30 дней старше текущей даты в файле и перемещения их в другой файл без необходимости вручную вводить текущую дату, должна быть системная дата автоматически в формате гг/мм/дд, аналогично $ awk ‘$NF <= “2018-05-01″‘ ip.txt

Возможно:

perl -MPOSIX -i -ane '
  BEGIN{
    $cutoff = strftime "%Y-%m-%d", localtime(time - 30*24*60*60)
  }
  print {$F[-1] lt $cutoff ? *STDOUT : *ARGVOUT} $_' файл > другой-файл

Это редактирует файл на месте, удаляя строки, для которых последнее F поле меньше t (лексическое сравнение) даты $cutoff (30 дней назад в формате ГГГГ-ММ-ДД) и выводя их в другой-файл вместо этого.

Ответ или решение

Для решения задачи по извлечению строк из файла, содержащих даты, которые на 30 дней старше текущей даты, и переноса этих строк в другой файл, можно использовать утилиту Perl. Ниже приведён пример скрипта, который выполняет эту задачу.

Скрипт на Perl:

#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';

# Определение файла для чтения и файла для записи
my $input_file = 'input.txt';
my $output_file = 'output.txt';

# Рассчитываем дату 30 дней назад в формате YYYY-MM-DD
my $cutoff = strftime "%Y-%m-%d", localtime(time - 30 * 24 * 60 * 60);

# Открытие выходного файла для записи
open my $out_fh, '>', $output_file or die "Не удалось открыть файл $output_file: $!";

# Чтение входного файла построчно
open my $in_fh, '<', $input_file or die "Не удалось открыть файл $input_file: $!";
while (my $line = <$in_fh>) {
    chomp $line;
    my @fields = split ' ', $line;  # Разделяем строку на поля

    # Предполагается, что дата находится в последнем поле
    if ($fields[-1] lt $cutoff) {
        print $out_fh "$line\n";  # Записываем строку, если дата старше $cutoff
    }
}
close $in_fh;   # Закрываем входной файл
close $out_fh;  # Закрываем выходной файл

print "Данные со строками старше 30 дней были перенесены в $output_file.\n";

Инструкции по использованию:

  1. Сохраните приведённый выше скрипт в файл, например filter_dates.pl.
  2. Убедитесь, что у вас установлен Perl. Вы можете проверить это с помощью команды perl -v в терминале.
  3. Подготовьте входной файл, содержащий данные с датами (например, input.txt).
  4. Измените права доступа к скрипту, чтобы он стал исполняемым:
    chmod +x filter_dates.pl
  5. Запустите скрипт:
    ./filter_dates.pl

После выполнения этих шагов строки с датами, которые более чем на 30 дней старше текущей даты, будут скопированы в файл output.txt.

Замечания:

  • Убедитесь, что даты в вашем файле имеют формат YYYY-MM-DD и находятся в последнем поле строки. Если формат или расположение даты иное, вам возможно потребуется внести соответствующие изменения в код.
  • Скрипт можно доработать для обработки ошибок, например, если файл не существует или имеет неожиданный формат.
Оцените материал
Добавить комментарий

Капча загружается...