2010-10-08 91 views
-1

我正在運行一個命令,該命令爲特定日期的每個小時返回96 .txt文件。所以最後它給了我一天24 * 96個文件在一個目錄中。 我的目標是提取四個月的數據,這將導致目錄中的30 * 24 * 96 * 4個文件。如何使用Perl從目錄中的所有文件中提取模式?

當我得到數據後,我需要從每個文件中提取某些「模式」並將其顯示爲輸出。

1)下面的腳本只有一天,其中日期是在腳本中硬編碼 2)我需要它在一個月內的所有天工作,我需要從六月運行至十月 3)數據是巨大的,我的磁盤將用完空間,所以我不想創建這些許多文件,而是我只是想動態grep,只獲得一個輸出文件。

我該如何有效地做到這一點?

我的shell腳本,看起來像這樣

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 
  • 這將返回我需要的文件。
  • 之後,我從每個文件grep「test/link/link2」*中提取一個URL模式。 grep的種類> 1.輸出
+0

的是您的最終目標,只是從每個網址獲取一些文字?如果是這樣,你可以使用perl來獲取html,得到你想要的,然後扔掉剩下的東西。 – 2010-10-08 11:19:55

+0

讓我看看,如果我有這個正確的:你在那裏*創建文件的shell腳本?然後你在你的本地文件系統上有它們,你需要處理它們 – Axeman 2010-10-08 13:13:25

+0

因此,這聽起來像你正在做你所需要的。問題是什麼? – 2010-10-08 18:35:07

回答

0

您可以使用此awk命令獲取網址

awk -vRS="</a>" '/href/&&/test.*link2/&&/category/{gsub(/.*<a.*href=\"|\".*/,"");print}' file 
+0

對不起,但我想我沒有明確提出我的問題。我編輯了我的問題。你可以看一下嗎? – TopCoder 2010-10-08 09:42:52

0

下面是如何循環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

我沒有提供代碼來處理1天的價值,因爲在我看來,您已經知道如何去做,而且您似乎只問過如何循環使用一系列日期。如果您希望使用原生Perl代碼(我的建議)來處理1天的價值,但需要將您的shell代碼轉換爲Perl,請將其作爲一個單獨的問題,但請鏈接到此代碼。 – DVK 2010-10-08 10:30:39

相關問題