perl -как преобразовать чч :мм :сс в секунды

Если ваш ./runбудет выводить свой вывод на стандартный вывод, если не задан файловый аргумент (, который является обычным в Unix/Linux ), тогда вы можете просто использовать:

./run | xz -c >output.txt.xz

Если ему нужен аргумент имени файла, но если запись в канал работает нормально, вы можете использовать либо специальное устройство, такое как /dev/stdoutили/dev/fd/1(оба должны быть эквивалентны ), например:

./run /dev/stdout | xz -c >output.txt.xz

Или вы можете использовать подстановку процесса , которая обычно доступна в большинстве современных оболочек, таких как bash, zsh или ksh, которая в конечном итоге будет использовать устройство из /dev/fdза кулисами для выполнения то же:

./run >(xz -c >output.txt.xz)

Этот последний также нуждается в ./run, чтобы иметь возможность писать в канал, но он должен работать лучше, чем другие, если ./runзаписывает вoutput.txtи в стандартный вывод в своей нормальной работе, в которой случае вывод будет перепутан, если вы перенаправите оба на стандартный вывод.

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

-1
20.05.2021, 21:30
2 ответа

Это должна делать следующая программа:

$hhmmss="02:50:30";
@arr=split(':',$hhmmss);
$sec=@arr[2];
$sec+=@arr[1]*60;
$sec+=@arr[0]*3600;
print $sec;
1
28.07.2021, 11:31
$ perl -le '$t=shift;
            ($h,$m,$s) = split /:/, $t;
            print $h * 3600 + $m * 60 + $s' 02:50:30
10230

или то же самое без переменной $t:

$ perl -l -e '($h,$m,$s) = split /:/, shift;
              print $h * 3600 + $m * 60 + $s' 02:50:30
10230
1
28.07.2021, 11:31

Теги

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