Как я могу извлечь шаблон из всех файлов в каталоге, используя Perl? - PullRequest
0 голосов
/ 08 октября 2010

Я запускаю команду, которая возвращает 96 .txt файлов за каждый час определенной даты. так, наконец, это дает мне 24 * 96 файлов на один день в каталоге. Моя цель - извлечь данные за четыре месяца, что приведет к 30 * 24 * 96 * 4 файлам в каталоге.

После того, как я получу данные, мне нужно извлечь определенный «шаблон» из каждого файла и отобразить его как вывод.

1) Приведенный ниже сценарий предназначен только для одного дня, когда в сценарии жестко задана дата 2) Мне нужно, чтобы он работал на все дни месяца, и мне нужно запустить его с июня по октябрь. 3) Поскольку данные огромны, на моем диске не хватит места, поэтому я не хочу создавать эти многие файлы, а просто хочу на лету выполнить grep и получить только один выходной файл.

Как мне эффективно это сделать?

Мой сценарий оболочки выглядит так

for R1 in {0..9}; do
  for S1 in {0..95}; do

      echo $R1 $S1

      curl  -H "Accept-Encoding: gzip" "http://someservice.com/getValue?Count=96&data=$S1&fields=hitType,QueryString,pathInfo" | zcat > 20101008-mydata-$R1-$S1.txt
  done
done
  • Возвращает нужные мне файлы.
  • После этого я извлекаю шаблон URL из каждого файла grep "test / link / link2" * | категория grep> 1. вывод

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Вот как перебрать даты за 4 месяца

#!/usr/bin/perl
use strict;
use warnings;
use Date::Simple ':all';

for (my $date = ymd(2010,4,1), my $end = ymd(2010,8,1);$date < $end; $date++) {
    my $YYYYMMDD = $date->format("%Y%m%d");
    process_one_day($YYYYMMDD); # Add more formats if needed as parameters
}

sub process_one_day {
    my $YYYYMMDD = shift;
    # ...
    # ... Insert your code to process that date
    # ... Either call system() command on the sample code in your question
    # ... Or better yet write a native Perl equivalent
    # ...
    # ... For native processing, use WWW::Mechanize to extract the data from the URL
    # ... and Perl's native grep() to grep for it
}
0 голосов
/ 08 октября 2010

вы можете использовать эту команду awk для получения URL

awk -vRS="</a>" '/href/&&/test.*link2/&&/category/{gsub(/.*<a.*href=\"|\".*/,"");print}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...