The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > UNIX for Advanced & Ekspertsøgning Brugere
.
google unix.com



UNIX for Advanced & Ekspertsøgning Brugere Expert-til-ekspert. Lær avancerede UNIX, UNIX-kommandoer, Linux operativsystemer, systemadministration, programmering, Shell, Shell Scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Enkle spørgsmål (for jer, hård for mig) BkontheShell718 Shell Programmering og Scripting 3 01-07-2008 11:48 AM
[spørgsmålet] hård motion, hjælpe behov EnioMarques UNIX for dummyer Spørgsmål & svar 2 09-20-2007 11:22 PM
Harddisk Spørgsmål Netghost AIX 0 08-24-2006 02:01 PM
Please Help .... Desperat brug for! Hard Spørgsmål! Sparticus007 UNIX for Advanced & Ekspertsøgning Brugere 1 01-11-2002 06:43 PM
Eksperter Kun! Hard Spørgsmål Ahead! Foo49272 UNIX for Advanced & Ekspertsøgning Brugere 1 01-07-2002 10:22 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 08-02-2008
msb65 msb65 is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Stillinger: 89
svært spørgsmål

Jeg har en mappe, der indeholder en række filer i formatet:
A2008001231000.L2

Jeg er kun interesseret i de 6-8 cifre, så filerne er effektivt:
?????---*. L2

Jeg har filer, der spænder fra ????? 001 *. L2 til ????? 366 *. L2

Det skal bemærkes, disse tre cifre repræsenterer den julianske dag af filerne. Mit mål er at være i stand til at definere to variabler: start_day og end_day. Hvordan kan jeg liste ud for alle de filer mellem start_day og end_day. BEMÆRK: Da den julianske dag skal være 3 cifre, det vil komplicere sagen.
  #2 (permalink)  
Old 08-02-2008
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Beliggenhed: Ashburn, Virginia
Indlæg: 9.131
Hvis du tror, det er svært, skal du bruge et forkert sprog. Her er det i ksh. Hvad du kalder "Julian" Jeg vil kalde "dag i år". Look up "julianske dag" på wikipedia. Dette script bruger mine datecalc script til at gøre det muligt for brugeren at indtaste endepunkter som ÅÅÅÅMMDD. datecalc er indsendt til dette websted og vores søgefunktion kan finde det for dig.

Én ting ved ksh ... et tal med et foranstillet nul, antages at være oktal. Det er derfor, jeg holder stripping nuller ud numre før du gør regning.


Code:
$ ls -1 files
A2008001231000.L2
A2008021231000.L2
A2008041231000.L2
A2008061231000.L2
A2008081231000.L2
A2008101231000.L2
$
$
$
$ ./findit
enter start yyyymmdd - 20080101
enter end yyyymmdd - 20080220
A2008001231000.L2 is in range
A2008021231000.L2 is in range
A2008041231000.L2 is in range
$
$
$
$ cat findit
#! /usr/bin/ksh

read start?"enter start yyyymmdd - "
y1=${start%????}
d1=${start#??????}
temp=${start%$d1}
m1=${temp#$y1}
m1=${m1#0}
d1=${d1#0}
doy1=$(($(datecalc -a $y1 $m1 $d1 - $y1 1 1) + 1))
#echo $start $y1 $m1 $d1 $doy1

read end?"enter end yyyymmdd - "
y2=${end%????}
d2=${end#??????}
temp=${end%$d2}
m2=${temp#$y2}
m2=${m2#0}
d2=${d2#0}
doy2=$(($(datecalc -a $y2 $m2 $d2 - $y2 1 1) + 1))
#echo $start $y2 $m2 $d2 $doy2

cd files
ls | while read name ; do
        temp=${name#?}
        temp1=${temp#????}
        f_year=${temp%$temp1}
        temp2=${temp1#???}
        f_doy=${temp1%$temp2}
        f_doy=${f_doy##*(0)}
#       echo $name $f_year $f_doy
        if ((y1<=f_year && doy1<=f_doy && f_year<=y2 && f_doy<=doy2)) ; then
                echo $name is in range
        fi
done
exit 0
$

  #3 (permalink)  
Old 08-02-2008
frygtindgydende redoubtable is offline
Registreret Bruger
  
 

Join Date: Aug 2008
Beliggenhed: Portugal
Posts: 242
Jeg kan se du er i mktime () paradis.
Fra manden mktime:

Code:
           struct tm {
               int tm_sec;         /* seconds */
               int tm_min;         /* minutes */
               int tm_hour;        /* hours */
               int tm_mday;        /* day of the month */
               int tm_mon;         /* month */
               int tm_year;        /* year */
               int tm_wday;        /* day of the week */
               int tm_yday;        /* day in the year */
               int tm_isdst;       /* daylight saving time */
           };

 tm_yday
              The number of days since January 1, in the range 0 to 365.

Nå, jeg kunne ikke få mktime () til at arbejde direkte, men jeg stadig bruges tm_yday.

Code:
Tsunami julian_days # perl test2.pl 
Enter start date [yyyy/mm/dd]: 20080101
Enter end date [yyyy/mm/dd]: 20080220
A2008041231000.L2
A2008021231000.L2
A2008001231000.L2
Tsunami julian_days # perl test2.pl 
Enter start date [yyyy/mm/dd]: 2008/01/01  
Enter end date [yyyy/mm/dd]: 2008/02/20
A2008041231000.L2
A2008021231000.L2
A2008001231000.L2
Tsunami julian_days #

og koden:


Code:
#!/usr/bin/perl -w

use POSIX;

$| = 1;

my $input;
my (@date_s, @date_e);

opendir(DIR, ".") || die "can't opendir: $!";
@dots = grep { ! /^\./ && /\.L2$/ } readdir(DIR);
closedir DIR;

print "Enter start date [yyyy/mm/dd]: ";
($input = <STDIN>) =~ /(\d{4})\/*-*(\d{2})\/*-*(\d{2})/;
$date_s[0] = mktime (0, 0, 0, $3, ($2-1), ($1-1900), 0, 0);
$date_s[2] = $1;
print "Enter end date [yyyy/mm/dd]: ";
($input = <STDIN>) =~ /(\d{4})\/*-*(\d{2})\/*-*(\d{2})/;
$date_e[0] = mktime (0, 0, 0, $3, ($2-1), ($1-1900), 0, 0);
$date_e[2] = $1;
(undef, undef, undef, undef, undef, undef, undef, $date_s[1] ,undef) = localtime($date_s[0]);
(undef, undef, undef, undef, undef, undef, undef, $date_e[1] ,undef) = localtime($date_e[0]);

foreach my $i (@dots)
{
        $i =~ /^A(\d{4})(\d{3})/;
        print $i . "\n" if (($1 >= $date_s[2] && $1 <= $date_e[2]) && (($2+0) >= $date_s[1] && ($2+0) <= $date_e[1]));  
}

Closed Thread

Bogmærker

Tags
datecalc

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 01:36 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0