The UNIX and Linux Forums  

Go Back   Die UNIX-und Linux-Foren > Top Foren > UNIX für Fortgeschrittene und Experten
.
Google unix.com



UNIX für Fortgeschrittene und Experten Expert-to-Experte. Erfahren Sie fortgeschrittene UNIX-, UNIX-Kommandos, Linux-Betriebssysteme, System-Administration, Programmierung, Shell, Shell-Skripte, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Einfache Frage (für euch, schwer für mich) BkontheShell718 Shell Programmierung und Scripting 3 01-07-2008 11:48 AM
[Frage] harte Übung, Hilfe EnioMarques UNIX for Dummies Questions & Answers 2 09-20-2007 11:22 PM
Hard Drive Frage Netghost AIX 0 08-24-2006 02:01 PM
Bitte Hilfe .... Dringend! Schwierige Frage! Sparticus007 UNIX für Fortgeschrittene und Experten 1 01-11-2002 06:43 PM
Nur für Experten! Hard Frage Ahead! Foo49272 UNIX für Fortgeschrittene und Experten 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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 08-02-2008
msb65 msb65 is offline
Registrierte Nutzer
  
 

Join Date: Aug 2008
Beiträge: 89
schwierige Frage

Ich habe ein Verzeichnis mit einer Reihe von Dateien im Format:
A2008001231000.L2

Ich habe nur die Sorge um die Ziffern 6-8, so dass die Dateien auch tatsächlich:
?????---*. L2

Ich habe Dateien, die von ????? 001 *. L2 zu ????? 366 *. L2

Es sollte darauf hingewiesen werden, diese drei Ziffern stehen für die Julian Tag der Dateien. Mein Ziel ist es, zu definieren zwei Variablen: start_day und end_day. Wie kann ich alle Dateien zwischen start_day und end_day. Hinweis: Da die julian Tage 3 Zeichen lang sein, sie gegenwärtig.
  #2 (permalink)  
Old 08-02-2008
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix-Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9131
Wenn Sie denken, dass dies schwierig ist, müssen Sie sich mit der falschen Sprache. Hier ist es in ksh. Was Sie als "Julian" Ich werde als "Tag des Jahres". Schauen Sie "Julianischer Tag" auf der Wikipedia. Dieses Skript verwendet meine datecalc-Skript, um den Benutzer auf, die als Endpunkte YYYYMMDD. datecalc ist auf dieser Seite und unsere Suchfunktion finden es für Sie.

Eine Sache, über ksh ... eine Zahl mit einer führenden Null wird davon ausgegangen, dass oktal. Dies ist der Grund, warum ich stripping führenden Nullen aus Zahlen, bevor Sie Rechnen.


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
Respekt redoubtable is offline
Registrierte Nutzer
  
 

Join Date: Aug 2008
Ort: Portugal
Beiträge: 242
Ich sehe Sie in mktime () Paradies.
Von dem Mann 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.

Nun, ich konnte nicht mktime (), um direkt, aber ich noch 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 #

und der Code:


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

Lesezeichen

Tags
datecalc

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 09:26 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0