Как я могу добраться и формат вчерашняя дата на командной строке?

У меня есть сценарий Perl, который запустит в задании крона на Linux SuSe. Это возьмет в качестве входа файл журнала, который был вчера сгенерирован. Имя файла журнала содержит дату (т.е. журнал 20100209)

Я могу отправить вчерашнюю дату с форматом в подсказке? Я должен создать дополнительный сценарий, чтобы получить дату и выполниться? Если так, как я могу сделать это?

Спасибо

perl myscript.pl -f log.20100209

Править

Спасибо за помощь

Это работало с:

perl myscript.pl -f log.`date --date='yesterday' '+%Y%m%d'`
8
задан Hasturkun 10 February 2010 в 23:18
поделиться

3 ответа

Дата GNU:

date --date='yesterday' '+%Y%m%d'
29
ответ дан 5 December 2019 в 05:34
поделиться

Вы можете получить вчерашнюю дату следующим образом:

perl -we'@a=localtime(time-24*3600);printf "%04d%02d%02d", $a[5]+1900, $a[4]+1, $a[3]'

Вы можете использовать это при вызове вашего скрипта в командной строке:

perl myscript.pl -f log.`perl -we'@a=localtime(time-24*3600);printf "%04d%02d%02d", $a[5]+1900, $a[4]+1, $a[3]'`

Но это не читается, и Я предлагаю вам написать подходящий скрипт, который вычисляет вчерашнюю дату, а затем вызывает myscript.pl.

1
ответ дан 5 December 2019 в 05:34
поделиться

Люди уже привели причины, по которым я обычно выручаю: старый (больше не применимый к большинству компиляторов) аргумент о том, чтобы не включать stdlib.h и использовать sizeof * p , чтобы убедиться, что типы и размеры всегда совпадают независимо от последующего обновления. Я хочу указать еще на один аргумент против кастинга. Он маленький, но я думаю, он применим.

C довольно слабо набран. Большинство преобразований безопасного типа происходит автоматически, а для большинства небезопасных требуется приведение. Рассмотрим:

int from_f(float f)
{
    return *(int *)&f;
}

Это опасный код. Это технически неопределенное поведение, хотя на практике оно будет делать то же самое почти на каждой платформе, на которой вы его запускаете. А актёрский состав помогает сказать вам "Этот код - ужасный взлом".

Подумайте:

int *p = (int *)malloc(sizeof(int) * 10);

Я вижу актёрский состав, и мне интересно: "Зачем это нужно? Где взлом? Это поднимает волосы на моей шее, что происходит что-то зло, когда на самом деле код совершенно безвреден.

Пока мы используем C, слепки (особенно слепки указателей) - это способ сказать: «Здесь происходит что-то злое и легко разрушаемое». Они могут достичь того, что вам нужно, но они указывают вам и будущим сопровождающим, что дети не в порядке.

Использование слепков на каждом маллоке уменьшает индикацию «взлома» при показании указателя. Это делает менее жутким видеть вещи, как * (int *) & f; .

Примечание: C и C++ - разные языки. C слабо типизируется, C++ более сильно типизируется. Слепки необходимы в C++, даже если они вообще не указывают на взлом, из-за (на мой скромный взгляд) излишне сильной системы типа C++. (Действительно, этот конкретный случай - единственное место, где, я думаю, система типа C++ «слишком сильна», но я не могу придумать место, где она «слишком слаба», что делает ее в целом слишком сильной для моих вкусов.)

Если вы беспокоитесь о совместимости C++, не стоит. Если вы пишете C, используйте компилятор C. Есть много действительно хороших, доступных для каждой платформы. Если по какой-то странной причине у вас есть для записи кода C, который компилируется чисто как C++, вы на самом деле не пишете C. Если вам нужно портировать C на C++, вы должны внести много изменений, чтобы сделать ваш код C более идиоматичным C++.

Если вы не можете сделать ничего из этого, ваш код не будет довольно независимо от того, что вы делаете, так что на самом деле не важно, как вы решите сделать в этот пункт. Мне нравится идея использования шаблонов для создания нового распределителя, который возвращает правильный тип, хотя это в основном просто переосмысление ключевого слова new .

-121--1713949-

В основном вы пишете инструмент дедупликации, где вы показываете обе записи на экране бок о бок с возможностью выбрать запись, которую вы хотите сохранить, но проверить отдельные данные из другой записи, чтобы сохранить также. Поскольку дедупликация очень отличается от базы данных к базе данных и сильно зависит от конкретной структуры таблицы и бизнес-правил (а также знания о том, на какие вещи нужно смотреть для того типа дедупликации вы делаете, так как они обычно показывают только самые важные таблицы отношений на экране), я никогда не видел тот, который не был построен в доме.

Но если вы хотите быстро просмотреть все данные, напишите запрос, который оставил соединения со всеми дочерними таблицами и отобразит все поля для обоих транзакций. Затем прочитайте свои результаты.

Что еще более важно, как вы в конечном итоге получили dup, если у вас есть бизнес-правило, которое требует, чтобы код транзакции был уникальным. Вы забыли, что все эти типы правил должны быть подкреплены базой данных, а не приложением? Почему в этом поле не было уникального индекса?

-121--2705496-

Вам не нужно отправлять вчерашнюю дату в качестве дополнительного параметра. Вы уже можете получить его с помощью двух других методов:

  1. встроенные функции Perl time (), localtime () или gmtime () дадут вам текущую дату и время, и вы можете работать с этим, чтобы определить вчерашнюю дату.
  2. Он уже включен в имя файла журнала, поэтому можно проанализировать имя файла, чтобы получить дату в нужном формате.

Perl имеет много модулей для работы с датами и временем, в зависимости от того, что вам нужно сделать.

0
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: