Я могу записать вывод команды разницы во времени в файл?

Это сделает задание:

perl -pe 'BEGIN { $/ = "//" } s!(?=http://\z)!\n!' urls.txt

Путем установки $/, я изменил определение строки, таким образом, это заканчивается // вместо новой строки. Это заставляет Perl считать один URL за один раз. Маловероятно, что URL содержит // кроме после схемы, но хорошо, если Вы сделаете, то regex помешает ему добавлять побочные новые строки.

Если Вы не хотите добавлять пустую строку перед первым URL:

perl -pe 'BEGIN { $/ = "//"; print scalar <> } s!(?=http://\z)!\n!' urls.txt

Вы могли бы попытаться сравнить, чтобы видеть ли s!http://\z!\nhttp://! быстрее. Они эквивалентны. Обратите внимание что /g флаг не необходим на замене, потому что может только быть одно соответствие на "строку".

5
10.05.2013, 01:15
4 ответа

Во многих оболочках включая ksh, zsh и bash, time ключевое слово и привыкло к конвейерам времени.

time foo | bar

Будет время оба foo и bar команды (zsh покажет Вам разбивку). Это сообщает об этом относительно stderr оболочки.

time foo.sh > bar.txt

Скажет Вам, что время должно было открыться bar.txt и выполненный foo.sh.

Если Вы хотите перенаправить timeвывод, необходимо перенаправить stderr в контексте, где time запускается как:

{ time foo.sh; } 2> bar.txt

Это:

2> bar.txt time foo.sh

работы также, но с ksh93 и bash, потому что это не находится в первом положении, time не распознан как ключевое слово, таким образом, time команда используется вместо этого (Вы, вероятно, заметите другой выходной формат, и это не делает конвейеров времени).

Обратите внимание, что оба перенаправили бы и вывод времени и ошибки foo.sh кому: bar.txt. Если бы Вы только хотите вывод времени, Вам было бы нужно:

{ time foo.sh 2>&3 3>&-; } 3>&2 2> bar.txt

Обратите внимание, что POSIX не указывает ли time ведет себя как ключевое слово или встроенный (ли это конвейеры времен или единственные команды). Таким образом, чтобы быть портативным (в случае, если Вы хотите использовать его в a sh сценарий, который Вы хотите портативный к различным подобным Unix системам), необходимо, вероятно, записать это:

command time -p foo.sh 2> bar.txt

Обратите внимание, что Вы не можете функции времени или builtins или конвейеры или перенаправление foo.sh ошибки отдельно там, если Вы не запускаете отдельную оболочку как в:

command time -p sh -c 'f() { blah; }; f | cat'

Но это означает, что синхронизация будет также включать время запуска этого дополнительного sh.

8
27.01.2020, 20:32

Не все версии времени поддерживают-o и - выходные аргументы.

Вы захотите выполнить команду как это:

(time script.sh) 1> /dev/null 2> /tmp/logFile

Это поместит вывод script.sh в/dev/null и результаты к/tmp/logFile.

Если Вы хотите, чтобы и STDERR и STDOUT перешли к файлу журнала, можно выполнить его как это:

(time script.sh) &> /tmp/logFile
3
27.01.2020, 20:32

Получить вывод ls и вывод time в файле:

(time ls) &> log

Получить просто вывод time в файле:

(time ls) 2> log
2
27.01.2020, 20:32

/usr/bin/time выводы к stderr, таким образом, необходимо будет перенаправить это.

/usr/bin/time foo.sh 2>bar.txt

Если Вы используете удар' time встроенный, необходимо записать это по-другому:

(time ls) 2>bar.txt

С другой стороны, GNU time поддержки --output аргумент:

/usr/bin/time --output bar.txt foo.sh 
2
27.01.2020, 20:32
  • 1
    Хм, мое время не имеет выходного аргумента, и 2>bar.txt не работал. –  sheldonk 09.05.2013, 23:06
  • 2
    Какую версию Вы имеете? Время GNU /usr/bin/time -V. Существует также команда времени, встроенная в удар. –  slm♦ 09.05.2013, 23:26
  • 3
    Это является достаточно взрослым, что это не поддерживает тот аргумент... Я буду искать обновление –  sheldonk 09.05.2013, 23:38
  • 4
    Тот первый пример не работал на меня ни один на ноутбуке Fedora 14. Я не думаю, что это имеет отношение ко времени, это - как мы передаем вывод по каналу. Если Вы изменяете его на (time ls) 2>bar.txt это хорошо работает. –  slm♦ 09.05.2013, 23:39

Теги

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