The UNIX and Linux Forums  

Go Back   В UNIX и Linux Форумы > Топ форумы > UNIX перспективных И опытных пользователей
.
Google unix.com



UNIX перспективных И опытных пользователей Эксперт-на-экспертов. Узнайте современные UNIX, UNIX команды, Linux, операционные системы, системы управления, программирование, Shell, Shell скриптов, Solaris, Linux, HP-UX, AIX, OS X, BSD.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
Простой вопрос (для вас, ребята, тяжело мне) BkontheShell718 Shell программирование и сценарии 3 01-07-2008 11:48 AM
[вопросы] трудно осуществить, необходима помощь EnioMarques UNIX для чайников Вопросы И Ответы 2 09-20-2007 11:22 PM
Жесткий диск Вопрос Netghost AIX 0 08-24-2006 02:01 PM
Пожалуйста, помогите .... Отчаянные нужно! Трудный вопрос! Sparticus007 UNIX перспективных И опытных пользователей 1 01-11-2002 06:43 PM
Эксперты Только! Жесткий Вопрос вперед!!!! Foo49272 UNIX перспективных И опытных пользователей 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 Оценить Thread Режимы дисплея
Old 08-02-2008
msb65 msb65 is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Сообщений: 89
трудный вопрос

У меня есть каталог, содержащий ряд файлов в формате:
A2008001231000.L2

Я лишь забота о 6-8 цифр, так что файлы эффективно:
?????---*. L2

Я файлы в диапазоне от 001 ????? *. L2 на ????? 366 *. L2

Следует отметить, эти три цифры представляют юлианский день файлов. Моя цель состоит в том, чтобы иметь возможность определить две переменные: start_day и end_day. Как я могу покинуть список всех файлов между start_day и end_day. Примечание: Поскольку юлианский дней должно быть 3 цифры долго она усложняет вопросы.
Old 08-02-2008
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Регистрация: август 2001
Место проведения: Ashburn, Вирджиния
Сообщения: 9131
Если вы считаете, что это трудно, вы должны будете использовать неправильный язык. Здесь она находится в KSH. Что вы называете "Джулиан" Я называю "день года". Смотри вверх "юлианский день" на Википедии. Данный скрипт использует мои datecalc сценарий позволяет пользователю ввести параметры, как ггггммдд. datecalc размещена на этом сайте и нашей поисковой функции может найти его для вас.

Одна вещь, о KSH ... рядом с одним из ведущих нулевой считается восьмеричное. Вот почему я держу зачистки ведущими нулями покинуть номера, прежде чем делать арифметика.


Код:
$ 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
$

Old 08-02-2008
грозный redoubtable is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Место проведения: Португалия
Сообщений: 242
Я вижу, вы в mktime () рай.
С человеком mktime:

Код:
           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.

Ну, я не мог получить mktime () работать напрямую, но я до сих пор используется tm_yday.

Код:
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 #

и код:


Код:
#!/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

Закладки

Теги
datecalc

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 07:54 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0