shell рулит?

studio

была дискуссия, закончившаяся утверждением, что shell рулит, однако:

tmp/test.scripts[21:33:24]>uname -rs
FreeBSD 4.10-STABLE
tmp/test.scripts[21:33:29]>wc -l file1 file2 f1 f2
392441 file1
392550 file2
36554 f1
35382 f2
856927 total


file1, file2, f1, f2 - текстовые файлы с длиной строки не превышающей 100 символов
из указанного треда были взяты скрипты:

#!/usr/bin/perl -wT
use strict;
local (*F1, *F2);
my ($f1, $f2);
open(F1, "< $ARGV[0]") or die;
open(F2, "< $ARGV[1]") or die;
while ( defined($f1 = <F1>) && defined($f2 = <F2>) ) {
print("$f1$f2");
}



#!/bin/sh
while read a <&3 ; read b <&4;do echo $a; echo $b ; done 3<$1 4<$2



nl -i2 -v1 -s'::' $1 >_F
nl -i2 -v2 -s'::' $2 >>_F
sort _F | sed 's/^[^:]*:://'
rm -f _F


некоторые из них были слегка изменены с целью приведения в рабочее состояние
а так же были написана пара скриптов на авке:

#!/usr/bin/awk -f
BEGIN{
while getline a < ARGV[1]) > 0 && (getline b < ARGV[2]) > 0) print a "\n" b
}



#!/usr/bin/awk -f
BEGIN{
p = 1
while (p > 0)
{
t = (getline a < ARGV[1])
p = (getline b < ARGV[2]) + t
if (p == 2) print a "\n" b
else if (t == 0) print b
else print a
}
}


первый из которых (далее - awk также как и скрипты на perl и sh, обрубает output как только заканчивается
наименьший из считываемых файлов, второй (далее - awk.long) при этом, также как и скрипт с использованием nl/sort,
дописывает целиком остаток более длинного файла.
при этом у скрипта на shell проблема с передачей tab-ов и множественных пробелов (он их все заменяет на
1 пробел а скрипт "nl/sort" все пустые строки пихает в начало файла
в результате:

/tmp/test.scripts[22:00:30]>time ./awk f1 f2 > /dev/null
real 0m0.323s
user 0m0.282s
sys 0m0.032s
tmp/test.scripts[22:00:49]>time ./awk.long f1 f2 > /dev/null
real 0m0.335s
user 0m0.287s
sys 0m0.048s
tmp/test.scripts[22:00:56]>time ./perl f1 f2 > /dev/null
real 0m0.346s
user 0m0.302s
sys 0m0.040s
tmp/test.scripts[22:01:56]>time ./nl.nl.sort f1 f2 > /dev/null
real 0m2.567s
user 0m1.923s
sys 0m0.259s
test.scripts[22:02:09]>time ./sh f1 f2 > /dev/null
real 0m12.207s
user 0m2.166s
sys 0m9.952s



tmp/test.scripts[22:02:30]>time ./sh file1 file2 > /dev/null
real 1m12.750s
user 0m15.831s
sys 0m56.201s
tmp/test.scripts[22:05:32]>time ./nl.nl.sort file1 file2 > /dev/null
real 0m27.744s
user 0m20.585s
sys 0m1.898s
tmp/test.scripts[22:06:48]>time ./awk file1 file2 > /dev/null
real 0m3.260s
user 0m2.858s
sys 0m0.352s
tmp/test.scripts[22:07:20]>time ./awk.long file1 file2 > /dev/null
real 0m3.404s
user 0m2.996s
sys 0m0.321s
tmp/test.scripts[22:07:29]>time ./perl file1 file2 > /dev/null
real 0m3.092s
user 0m2.980s
sys 0m0.087s


no comments

yolki

Чёт-я не понял?
Это утверждение, что перл всех зарулил на text-processing?
тоже мне новость..
ты вот ещё для полноты картины выдай
ls -la ./awk ./awk.long ./perl ./nl.nl.sort ./sh
и станет понятно, что мне быстрее написать на шелле и отхлебнуть пива (пока она работает чем писать на перле и пива не попить..

Chupa

> и станет понятно, что мне быстрее написать на шелле и отхлебнуть пива
> (пока она работает чем писать на перле и пива не попить..
даже к метро за ним сходить успеешь

evgen5555

Не факт, шелы разные бывают, а перл - он везде один

janlynn

shell рулит

evgen5555

Какой именно?

janlynn

например zsh, но в последнее время юзаю bash-2.05b

evgen5555

И то, и то - говно.

janlynn

gg, ну расскажи, что не говно

evgen5555

Все, что не Un*x-подобное и не Un*x-програменное.

Chupa

> Все, что не ...
это называется словом "фобия", чувэ

studio

Чёт-я не понял?
Это утверждение, что перл всех зарулил на text-processing?
тоже мне новость..
ты вот ещё для полноты картины выдай
ls -la ./awk ./awk.long ./perl ./nl.nl.sort ./sh
и станет понятно, что мне быстрее написать на шелле и отхлебнуть пива (пока она работает чем писать на перле и пива не попить..
довольно странный вывод:
я, вынося в заголовок вопрос, однозначно определил в чем я усомнился (в том, рулит ли шелл)
ссылку на тред привел специально, чтоб была понятна предыстория этого поста (там в предпоследнем посте было утверждение, что скорее всего такой скрипт на шелле будет по скорости сравним с перловым скриптом, в последнем - что, в частности из-за этого, шелл рулит)
отсюда, после сравнения времен работы скриптов, следует как минимум один очевидный вывод: сделанное ранее утверждение о сравнимой скорости скриптов на шелле и перле не верно (и только!). Додумавать за меня, что я пытаюсь сказать, оставьте моему личному телепату.
для полноты картины:

-rwxr-xr-x 1 kirill wheel 106 25 сен 21:17 awk
-rwxr-xr-x 1 kirill wheel 187 25 сен 21:46 awk.long
-rwxr-xr-x 1 kirill wheel 89 25 сен 16:05 nl.nl.sort
-rwxr-xr-x 1 kirill wheel 213 25 сен 16:04 perl
-rwxr-xr-x 1 kirill wheel 78 25 сен 16:05 sh


а вообще, кто тебе сказал, что этот скрипт на шелле ты напишешь быстрее, чем я аналогичный на авке?
и рулит не перл, а авк
Оставить комментарий
Имя или ник:
Комментарий: