The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Выпуск утилиты GNU grep 3.1"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск утилиты GNU grep 3.1"  +/
Сообщение от opennews (??) on 04-Июл-17, 09:13 
Представлен (http://www.mail-archive.com/info-gnu@gnu.org/msg02306.html) выпуск утилиты для организации поиска данных в текстовых файлах - GNU Grep 3.1 (http://www.gnu.org/software/grep/), в котором примерно в 7 раз увеличена производительность обработки масок '[0-9]' при использовании многобайтовых локалей.


Кроме того, опция "-m" (прекратить чтение файла после N совпадений) отныне не влияет на вывод дополнительных строк контекста, число которых задаётся опцией "-A" (показать N строк, идущих после совпадения). Например, команда 'grep "^" -m1 -A1' теперь приведёт к выводу двух строк - одного совпадения и следующей за ним строки, а не одной как раньше. На платформе Windows опций "--binary" (-U) теперь включает ввод/вывод в режиме обработки бинарных данных, а опция "--unix-byte-offsets" (-u) игнорируется.

URL: http://www.mail-archive.com/info-gnu@gnu.org/msg02306.html
Новость: http://www.opennet.dev/opennews/art.shtml?num=46804

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Выпуск утилиты GNU grep 3.1"  +6 +/
Сообщение от Аноним (??) on 04-Июл-17, 09:13 
Ждем улучшенной версии grepd
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Выпуск утилиты GNU grep 3.1"  +3 +/
Сообщение от Аноним (??) on 04-Июл-17, 12:40 
не улучшенной, а Правильной, от Великого Нечитателя манов
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Выпуск утилиты GNU grep 3.1"  +8 +/
Сообщение от A.Stahl (ok) on 04-Июл-17, 09:21 
>увеличена производительность

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним email(??) on 04-Июл-17, 09:27 
Потому что grep ничем уже не заменишь. Linux без grep что стол без ножки.
Будет хоть 10 крутых замен grep, а пользоваться всё равно будут им же.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Выпуск утилиты GNU grep 3.1"  +3 +/
Сообщение от A.Stahl (ok) on 04-Июл-17, 09:45 
Ничего не мешает написать какой-то perg на Rust+Lua с нардами и инкассаторшами. Сказать что он безопасней и хипстеры перебегут за пару недель. Но никто не пишет же. А почему? Потому что проект неспешно и адекватно развивается (да, это камень в огород КДЕ-Гномеров)
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Аноним (??) on 04-Июл-17, 10:08 
> Ничего не мешает написать какой-то perg на Rust

Уже написано: https://github.com/BurntSushi/ripgrep
И уже быстрее Grep.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Andrey Mitrofanov on 04-Июл-17, 11:29 
> Уже написано: https://github.com/BurntSushi/ripgrep
> И уже быстрее Grep.

Совместимость?...

Сколько дистрибутивов gnu\linux полностью заменили им GNU grep? А при сборке всех своих пакетов из исходников, например?

0.0 ?....

Ох же ж, мы ж опечалены. Работайте лучше.   ...и ещё быстрее!1

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

35. "Выпуск утилиты GNU grep 3.1"  –2 +/
Сообщение от Аноним (??) on 04-Июл-17, 21:30 
> Совместимость?...

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

14. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от rshadow (ok) on 04-Июл-17, 14:33 
Таких уже дофига было. Только быстрее оно в определенных случаях: на очень маленьких/больших текстах/шаблонах. А в среднем по скорости и переносимости хуже.
Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

30. "Выпуск утилиты GNU grep 3.1"  –5 +/
Сообщение от лютый жабист__ on 04-Июл-17, 20:34 
> Таких уже дофига было. Только быстрее оно в определенных случаях: на очень
> маленьких/больших текстах/шаблонах. А в среднем по скорости и переносимости хуже.

Победитель по принципу "среднее по больнице" это значит ни в чём не хорош. А ИТ развивается в направлении узкой специализации. Например вместо обсолютно одинаковых по ТТХ mysql/postgres/oracle пришли разные НОСКЛ и унесли 80% рынка. С ЯП так же, появилось множество языков со своей нишей и унесли 95% задач у мощной сишечки.

p.s. Что лучше, прога которая час занимает 2.5ГБ ОЗУ и 1 ядро на 100% или другая, которая ест 8ГБ на 5 секунд? 8))))

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

32. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 20:46 
а когда этих 8ГБ нет, прога просто падает не выполняя свою задачу
Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

33. "Выпуск утилиты GNU grep 3.1"  –4 +/
Сообщение от лютый жабист__ on 04-Июл-17, 21:09 
>а когда этих 8ГБ нет

grep сишный через час выпал в OOM на сервере с 96ГБ ОЗУ.

Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

36. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 22:29 
Ну значит очень тупая попытка использования утилиты. Я на 146% уверен что дело в ваших руках :)
Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

61. "Выпуск утилиты GNU grep 3.1"  +2 +/
Сообщение от . on 07-Июл-17, 06:12 
Оно - жабист. У них не руки а лапки.
Про мозги я их жалости - даже не буду :)
Сколько всяких хадупов они понаписали ... а потом бац! и разгромная статья от аффтараф и гур как грепами не напрягаясь разобрать то на чём хадуп разрывает на части :)
Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

40. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Led (ok) on 04-Июл-17, 23:53 
> p.s. Что лучше, прога которая час занимает 2.5ГБ ОЗУ и 1 ядро
> на 100% или другая, которая ест 8ГБ на 5 секунд? 8))))

Что, жаба не только съела память, но и часы остановила?

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

44. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от OramahMaalhur (ok) on 05-Июл-17, 01:34 
>the usability of The Silver Searcher (similar to ack) with the raw speed of GNU grep

погодите, у The Silver Searcher  (ag) вроде же всё в порядке со скоростью?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

29. "Выпуск утилиты GNU grep 3.1"  –5 +/
Сообщение от лютый жабист__ on 04-Июл-17, 20:27 
>Сказать что он безопасней и хипстеры перебегут за пару недель

Обозвал других хипстерами и сразу почуйствовал прилив крутизны?

В первую очередь все эти линуховые сишные утильки архитектурно убогие и тормозные, т.к. написаны во времена "640к хватит всем". Делаем чуть что сложнее банального grep -i blabla и приплыли.

Вот из прямо сейчас очередной факап грепа:

дано два файла с ОГРН (число 13 символов), в одном 4.5m, в другом 800k строчек. Надо сделать третий файл с содержимым f1 которого нет в f2.

grep -v -x -f f2 f1 >f3
съел 2.5ГБ рамы и задумался уже на много минут. Сервак с 12 ядрами, 100ГБ ОЗУ. И чё это грепу дало? В проге нормальной архитектуры это должно делаться за от силы 10 сек, а может и меньше 1.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

34. "Выпуск утилиты GNU grep 3.1"  +5 +/
Сообщение от L.P. on 04-Июл-17, 21:14 
> grep -v -x -f f2 f1 >f3

А за хлебом ты тоже на грузовике ездишь?
man uniq
man comm

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

45. "Выпуск утилиты GNU grep 3.1"  +6 +/
Сообщение от Аноним84701 (ok) on 05-Июл-17, 03:16 
> дано два файла с ОГРН (число 13 символов), в одном 4.5m, в другом 800k строчек. Надо сделать третий файл с содержимым f1 которого нет в f2.

Так как вы не написали, в каком файле сколько строк, сделал для верности:


% seq 1000000000000 1000005000000|shuf>f1
% seq 1000003000000 1000009000000|shuf>f2
head -3 f1 f2 && wc -l f1 f2
==> f1 <==
1000001476233
1000004330833
1000001025162

==> f2 <==
1000006027753
1000007334577
1000007732550
5000001 f1
6000001 f2
11000002 total


Т.е. 5м и 6м. Cойдет?
> grep -v -x -f f2 f1 >f3
> съел 2.5ГБ рамы и задумался уже на много минут. Сервак с 12 ядрами, 100ГБ ОЗУ. И чё это грепу дало?

Cервака под рукой нема, есть старенький ноут с i5 (первым еще) и "слегка" поменьше рамы.
НО! Есть чит, называется "man grep"!
> -F, --fixed-strings
>              Interpret PATTERN as a list of fixed strings, separated by  newlines, any of which is to be matched
>  fgrep is the same as ‘grep -F’.


% time grep -v -x -F -f f1 f2|wc -l
4000000
grep -v -x -F -f f1 f2  16,20s user 0,90s system 99% cpu 17,117 total #1GB ОЗУ
wc -l  0,56s user 0,04s system 3% cpu 17,023 total

% time grep -v -x -F -f f2 f1|wc -l
3000000
grep -v -x -F -f f2 f1  18,39s user 1,05s system 99% cpu 19,470 total # 1.2GB ОЗУ
wc -l  0,43s user 0,03s system 2% cpu 19,357 total

# убираем -х, который тут нужен как рыбе зонтик
% time grep -v -c -F -f f2 f1      
3000000
grep -v -c -F -f f2 f1  15,42s user 0,57s system 99% cpu 16,015 total  # ~700MB озу

% time awk 'NR==FNR {a[$0];next} !($0 in a){print $0}' f2 f1|wc -l            
3000000
awk 'NR==FNR {a[$0];next} !($0 in a){print $0}' f2 f1  11,76s user 0,65s system 99% cpu 12,411 total
wc -l  0,40s user 0,05s system 3% cpu 12,334 total    #~1ГБ


> Вот из прямо сейчас очередной факап грепа:

А может, проблема в прокладке между спинкой стула и монитором? :)

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

51. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Аноним (??) on 05-Июл-17, 20:10 
> Надо сделать третий файл с содержимым f1 которого нет в f2.

Ты grep с join перепутал, у жабистов это бывает.

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

58. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Andrey Mitrofanov on 06-Июл-17, 10:39 
>> Надо сделать третий файл с содержимым f1 которого нет в f2.
> Ты grep с join перепутал, у жабистов это бывает.

Important: FILE1 and FILE2 must be sorted on the join fields.

Мы тут стараемся, seq-и shuf[fle]-им, а вы хотите сказать надо было sort-ить?! Неслыханно.  >>?<<

Ответить | Правка | ^ к родителю #51 | Наверх | Cообщить модератору

13. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от VINRARUS (ok) on 04-Июл-17, 13:15 
sed лучше 8)
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

24. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от Аноним (??) on 04-Июл-17, 18:44 
Седрик лучше.
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

28. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от angra (ok) on 04-Июл-17, 20:02 
Ну тогда уже perl, который заменяет собой сразу grep, sed, awk, tr, неинтерактивный шелл и кучу других утилит. Другое дело, что для простейших задач команда с grep получается короче, чем однострочник на perl.
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

38. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от trolleybus email on 04-Июл-17, 23:04 
А еще лучше питон
print( {e for e in open("f1", "r")} - {e for e in open("f2", "r")} )
Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

41. "Выпуск утилиты GNU grep 3.1"  –3 +/
Сообщение от VINRARUS (ok) on 05-Июл-17, 00:03 
А я умею на чистом SHELL заменять awk '{print $5}' например:

gigi()
{
read LIST
NO="$1"
II=' '
TORBA=1
while [ "$NO" != "$TORBA" ]
do
    LIST="${LIST#*$II}"
    let TORBA++
done
echo "${LIST%%$II*}"
}
echo "1a 2b 3c 4d 5e 6x 7y 8z" | gigi 5

Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

48. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от Аноним (??) on 05-Июл-17, 10:05 
#!/bin/bash
gigi() {
    local A
    read -a A
    echo "${A[$1-1]}"
}
echo "1a 2b 3c 4d 5e 6x 7y 8z" | gigi 5
Ответить | Правка | ^ к родителю #41 | Наверх | Cообщить модератору

49. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от VINRARUS (ok) on 05-Июл-17, 12:18 
Токо оно в SHELL не работает.
Ответить | Правка | ^ к родителю #48 | Наверх | Cообщить модератору

50. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Andrey Mitrofanov on 05-Июл-17, 12:37 
> Токо оно в SHELL не работает.

С-с-слабак!

@@ -1,7 +1,9 @@
-#!/bin/bash
+#!/bin/sh
+bibi() {
+    eval "echo \$$SHI"
+}
gigi() {
-    local A
-    read -a A
-    echo "${A[$1-1]}"
+    local SHI="$1"
+    bibi `head -1`
}
echo "1a 2b 3c 4d 5e 6x 7y 8z" | gigi 5
//Вариант с рекурсией в активной разработке... Ждите коммитов.
Ответить | Правка | ^ к родителю #49 | Наверх | Cообщить модератору

42. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от angra (ok) on 05-Июл-17, 00:16 
$ python -c 'print( {e for e in open("f1", "r")} - {e for e in open("f2", "r")} ) '
set(['13\n', '12\n', '45\n'])

И что этот типа однострочник должен был полезного делать, кроме вывода содержимого перфого файла в извращенном виде? Зачем был нужен второй файл?

Update: Понял, он читает в память оба файла и выдает строки из первого, которых нет во втором. То бишь соответствует примерно такому однострочнику на perl:

$ perl -e 'push @ARGV,"f2"; %h=map {$_=>1} <>;push @ARGV,"f1"; print for grep ! $h{$_},<>'

Только последний выводит в более удобном виде и читает в память только второй файл, что делает его более пригодным для практического использования.

Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

46. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Andrey Mitrofanov on 05-Июл-17, 06:13 
> Ну тогда уже perl, который заменяет собой сразу grep, sed, awk, tr,

"Ноги, крылья... Хвост!"  B-)

$ time awk 'ARGIND==1{x[$0]=1}ARGIND==2&&!($0 in x)' <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l
4000000

real    0m17.431s
user    0m10.712s
sys     0m0.232s
$ _

> задач команда с grep получается короче, чем однострочник на perl.

$ time grep -vFf <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l
4000000

real    0m55.920s
user    0m50.092s
sys     0m0.860s
$ _

//с s|time|/usr/bin/time -f %e\\t%U\\t%M|,

16.88   10.36   323256
4000000

и

58.31   49.62   1779584
4000000

соответственно.

%M     Максимальный резидентный размер процесса в течении его выполнения в килобайтах.

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

53. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от angra (ok) on 06-Июл-17, 02:14 
Ты процитировал фразы о perl, но при этом зачем-то сравнил grep с awk. Давай сравним с perl и для чистоты эксперимента сделаем на одном и том же наборе данных:


$ seq 1000000000000 1000005000000|shuf >f1
$ seq 1000003000000 1000009000000|shuf >f2

$ /usr/bin/time -f %e\\t%U\\t%M grep -vFf f1 f2 | wc -l
64.12    62.94    1781788
4000000


$ /usr/bin/time -f %e\\t%U\\t%M perl -e 'push @ARGV,"f1"; %h=map {$_=>1} <>;push @ARGV,"f2"; print for grep ! $h{$_},<>' | wc -l
11.71    10.85    1441532
4000000

Ну как бы perl однозначно в плюсе по потреблению ресурсов и это на крайне выгодной для grep задаче.

С awk сравнить на своей машине не могу, так как при знании perl нет никакого смысла изучать глубоко синтаксис для всех вариантов awk, а твой вариант у меня просто не работает:

$ awk 'ARGIND==1{x[$0]=1}ARGIND==2&&!($0 in x)' <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l
0
$ awk 'ARGIND==1{x[$0]=1}ARGIND==2&&!($0 in x)' f1 f2 | wc -l
0
$ awk  -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

compiled limits:
max NF             32767
sprintf buffer      1020

Ответить | Правка | ^ к родителю #46 | Наверх | Cообщить модератору

54. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Аноним (??) on 06-Июл-17, 05:00 
> Ну как бы perl однозначно в плюсе по потреблению ресурсов и это
> на крайне выгодной для grep задаче.

Странно. grep (2.27) у меня отрабатывает чуть, а gawk (4.1.4) и вовсе в полтора раза быстрее перла (5.24).

Питонятина для полноты:
$ python -c 'h=set(open("f1"));import sys;sys.stdout.writelines(l for l in open("f2") if l not in h)'
Третий питон по скорости cравним с перлом. Второй быстрее третьего, в два раза.

> на крайне выгодной для grep задаче.

Крайне выгодно для grep было бы искать эти 5 миллионов паттернов в файле с более свободным форматом.

Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

55. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от angra (ok) on 06-Июл-17, 07:43 
> Странно. grep (2.27) у меня отрабатывает чуть, а gawk (4.1.4) и вовсе  в полтора раза быстрее перла (5.24).

А что тут странного? Собственно сэта новость о новой версии, в которой определенные операции ускорили в 9 раз. Между 2.20(у меня) и 2.27(у вас) вполне могли оптимизировать поиск фиксированных строк.

> Третий питон по скорости cравним с перлом. Второй быстрее третьего, в два раза.

У меня тоже вариант с вторым питоном отрабатывает в два раза быстрее, чем с perl

> Крайне выгодно для grep было бы искать эти 5 миллионов паттернов в файле с более свободным форматом.

Ну было бы в perl и python поиск подстроки вместо сравнения строк, принципиально бы ничего не изменилось. А вот если бы стояла задача поиска с более интересными критериями, например в данном случае убрать из второго файла все  строки, где числа между 1000000000000 и 1000005000000, то варианты perl/python выполнились бы быстрее и потребовали минимум памяти.

Но вообще я никогда не выбирал perl вместо grep или awk из-за скорости. Просто удобней выучить один раз его, чем синтаксис и ключи кучи разных утилит, которые к тому же будут по разному работать в зависимости от версии и реализации(awk может предоставляться gawk, а может mawk). А однострочник на perl у меня сработает одинаково, что на древней centos 5, что на последней ubuntu.


Ответить | Правка | ^ к родителю #54 | Наверх | Cообщить модератору

56. "Замер удался!"  +1 +/
Сообщение от Andrey Mitrofanov on 06-Июл-17, 09:53 
> Ты процитировал фразы о perl, но при этом зачем-то сравнил grep с

Ну, при не знании перл, я предпочёл про него не писать...

> $ /usr/bin/time -f %e\\t%U\\t%M grep -vFf f1 f2 | wc -l
> 64.12 62.94 1781788
> $ /usr/bin/time -f %e\\t%U\\t%M perl -e 'push @ARGV,"f1"; %h=map {$_=>1} <>;push
>11.71 >10.85 1441532
> Ну как бы perl однозначно в плюсе по потреблению ресурсов и это
> на крайне выгодной для grep задаче.
> С awk сравнить на своей машине не могу, так как при знании

...ровно, как и ты про GNU awk.
#>>>16.88  10.36  323,256

> perl нет никакого смысла изучать глубоко синтаксис для всех вариантов awk,

Ну, победил, молодец.

А чего с файлами-то? Одной строкой ваш перл не умеет или у тебя и bash "не завезли"?

/usr/bin/time -f %e\\t%U\\t%M <ваше заклининие для Арг1 и Арг2 вставить здесь>   <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l

Сим приглашаю и питонистов померяться -- одной строкой, по шаблону выше^^^. GNU bash обязателен. На одной машине прогоните с GNU grep, GNU awk -- для сравнения же, да.

Желающие с agrep, bsdgrep также welkomen.


.
.
.
Хотя бесссмысленно это всё. Криворукого джависта утёрли и ладно, не писать же на Си вымученный образчик со sparse битовыми полями, чтобы накрутить пузомерку, првильно?
-
-
-

Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

63. "Замер удался!"  +1 +/
Сообщение от . on 08-Июл-17, 03:02 
>Одной строкой ваш перл не умеет или у тебя и bash "не завезли"?

Поленился чел просто, но я "дожал":
#!/bin/bash
awk -V | head -1
time awk 'ARGIND==1{x[$0]=1}ARGIND==2&&!($0 in x)' <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l

grep -V | head -1
time grep -vFf <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l

perl -V | head -1
time perl -e 'push @ARGV,"'<(seq 1000000000000 1000005000000|shuf)'"; %h=map {$_=>1} <>;push @ARGV,"'<(seq 1000003000000 1000009000000|shuf)'"; print for grep ! $h{$_},<>' | wc -l

И на моём восьми-головом сионисте :) (X5482s) оно выдаёт так (+\- - ломы же в сингл грузиться):
$ ./testrun.sh
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.2)
4000000

real    0m12.221s
user    0m10.784s
sys    0m0.572s
grep (GNU grep) 2.27
4000000

real    0m13.560s
user    0m11.476s
sys    0m0.464s
Summary of my perl5 (revision 5 version 24 subversion 1) configuration:
4000000

real    0m17.468s
user    0m14.912s
sys    0m1.632s


>Сим приглашаю и питонистов померяться
>Желающие с agrep, bsdgrep также welkomen.
>Хотя бесссмысленно это всё.

В жизни как известно - вообще со смыслом напряжёнка :) А так ... всё лучше чем шЫряться или в горькую нырять ... так что Ок!

Ответить | Правка | ^ к родителю #56 | Наверх | Cообщить модератору

64. "Замер удался!"  +/
Сообщение от . on 08-Июл-17, 06:52 
>>Сим приглашаю и питонистов померяться

python -V | head -1
time python - <<EOF <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l
import sys
d = {}
with open(sys.argv[1]) as f1:
    for line in f1:
        d[line.rstrip("\n")]=1
with open(sys.argv[2]) as f2:
    for line in f2:
        if line.rstrip("\n") not in d : print line.rstrip("\n")
EOF

Python 2.7.13
4000000

real    0m11.104s
user    0m9.736s
sys    0m0.516s

Ответить | Правка | ^ к родителю #63 | Наверх | Cообщить модератору

65. "Замер удался!"  –1 +/
Сообщение от Аноним (??) on 08-Июл-17, 15:33 
> Python 2.7.13
> 4000000
> real    0m11.104s
> user    0m9.736s
> sys    0m0.516s

Python 2.7.13
4000000

real    0m20,490s
user    0m16,934s
sys    0m0,570s
>   d[line.rstrip("\n")]=1

Убираем вездесущий rstrip и получаем ускорение раза в полтора на ровном месте:
>     for line in f1:
>        d[line]=1

real    0m13,029s
user    0m9,299s
sys    0m0,527s

Или заменяем на однострочник:
% time python -c 'import sys;h=set(open(sys.argv[1]));sys.stdout.writelines(l for l in open(sys.argv[2]) if l not in h)' <(seq 1000000000000 1000005000000|shuf) <(seq 1000003000000 1000009000000|shuf) |wc -l

real    0m10,557s
user    0m7,168s
sys    0m0,442s

Ответить | Правка | ^ к родителю #64 | Наверх | Cообщить модератору

67. "Замер удался!"  +/
Сообщение от Andrey Mitrofanov on 09-Июл-17, 10:23 
##>> > $ /usr/bin/time -f %e\\t%U\\t%M
>>Одной строкой ваш перл не умеет или у тебя и bash "не завезли"?
> Поленился чел просто, но я "дожал":

Спасибо...

> #!/bin/bash
> awk -V | head -1
> time awk '

..., но "я эе просил 400, а здесь 403 !?".

Время и _память_ мерять, в смысле.

Ответить | Правка | ^ к родителю #63 | Наверх | Cообщить модератору

66. "Замер удался!"  –1 +/
Сообщение от Аноним (??) on 08-Июл-17, 15:35 

> А чего с файлами-то? Одной строкой ваш перл не умеет или у
> тебя и bash "не завезли"?

Очевидно же:
>> и для чистоты эксперимента сделаем на одном и том же наборе данных

КО

Ответить | Правка | ^ к родителю #56 | Наверх | Cообщить модератору

69. "Замер удался!"  –2 +/
Сообщение от _ (??) on 11-Июл-17, 18:28 
Не КО - а ко-ко-ко! :)
Потому как наступишь в гов^W - на то что скорость дисков у людей отличается на порядки, а памяти - максимум в разы.
Ответить | Правка | ^ к родителю #66 | Наверх | Cообщить модератору

70. "Замер удался!"  +/
Сообщение от Аноним (??) on 13-Июл-17, 06:17 
> Не КО - а ко-ко-ко! :)
> Потому как наступишь в гов^W - на то что скорость дисков у
> людей отличается на порядки, а памяти - максимум в разы.

tmpfs? Не, не слышал.


Ответить | Правка | ^ к родителю #69 | Наверх | Cообщить модератору

68. "GNU grep 3.1"  +/
Сообщение от Andrey Mitrofanov on 10-Июл-17, 09:30 
> perl нет никакого смысла изучать глубоко синтаксис для всех вариантов awk,
> $ awk  -W version
> mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

mawk 'FNR==1{a++}a==1{x[$0]=1}a==2&&!x[$0]'

с gawk-ом тоже работает. и с gawk --posix.

Ответить | Правка | ^ к родителю #53 | Наверх | Cообщить модератору

6. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 09:49 
А чего они никак less не догонят по версиям? Поднапрячься нужно парням!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Выпуск утилиты GNU grep 3.1"  –3 +/
Сообщение от iZEN email(ok) on 04-Июл-17, 11:53 
Чем GNU grep лучше BSD grep?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Выпуск утилиты GNU grep 3.1"  +16 +/
Сообщение от Andrey Mitrofanov on 04-Июл-17, 11:56 
> Чем GNU grep лучше BSD grep?

Поциент, почему вы думаете, что ваш BSD grep хуже, чем GNU grep? Вас это беспокоит? Расскажите нам больше.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Буратино on 04-Июл-17, 12:01 
Чем армяне!
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

16. "Выпуск утилиты GNU grep 3.1"  –2 +/
Сообщение от Аноним (??) on 04-Июл-17, 15:32 
Ничем не лучше и не хуже:

$ uname -a
FreeBSD freebsd110-amd64 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0 r306420: Thu Sep 29 01:43:23 UTC 2016     root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
$ grep --version
grep (GNU grep) 2.5.1-FreeBSD

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

17. "Выпуск утилиты GNU grep 3.1"  –3 +/
Сообщение от Аноним (??) on 04-Июл-17, 15:33 
Ну то есть похуже, конечно, тем, что версия допотопная.
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Выпуск утилиты GNU grep 3.1"  +2 +/
Сообщение от Аноним (??) on 04-Июл-17, 15:57 
> Ну то есть похуже, конечно, тем, что версия допотопная.

Ох уж эти эксперты опеннета:


% bsdgrep --version                                                              
bsdgrep (BSD grep) 2.5.1-FreeBSD


git log --pretty=format:"%h%x09%an%x09%ad%x09%s" /usr/src/usr.bin/grep
77e420848ad     gjb     Mon May 22 15:51:17 2017 +0000  MFC r313955 (emaste):  bsdgrep: document ignored option -u
521ece6e40b     dim     Tue Aug 9 19:20:53 2016 +0000   MFC r303676:
92100036c84     ngie    Wed May 4 23:20:53 2016 +0000   Merge ^/user/ngie/release-pkg-fix-tests to unbreak how test files are installed after r298107
086e6f562ff     gjb     Mon Mar 14 18:54:29 2016 +0000  MFH
5d2092c908f     ian     Sun Mar 13 14:53:12 2016 +0000  Fix a bug in bsdgrep that caused the program to hang in a tight loop for some combinations of command line options and search patterns.  The code was examining regexec flags looking for a regcomp flag value.  The fix is to look in the struct field where the decoded regcomp flag was stored when the regex was compiled.
1c7e318a9a3     gjb     Thu Mar 10 21:16:01 2016 +0000  MFH
aab40fdc3dd     bdrewery        Wed Mar 9 22:46:01 2016 +0000   DIRDEPS_BUILD: Connect MK_TESTS.


Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Andrey Mitrofanov on 04-Июл-17, 16:58 
#>>>$ grep --version
#>>> grep (GNU grep) 2.5.1-FreeBSD
> Ох уж эти эксперты опеннета:
> % bsdgrep --version
> bsdgrep (BSD grep) 2.5.1-FreeBSD

Вот зачем ты так?! Изя же запутался! Фу таким быть.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

21. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 17:57 
> % bsdgrep --version

Ну и на фига он там, если им всё равно никто кроме пары маргиналов не пользуется?

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

22. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Аноним (??) on 04-Июл-17, 18:03 
К тому же

$ ldd /usr/bin/bsdgrep | grep gnu
    libgnuregex.so.5 => /usr/lib/libgnuregex.so.5 (0x800e82000)

И это неспроста, ибо фряшная реализация регулярок с0сёт.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

23. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 18:33 
> К тому же
> $ ldd /usr/bin/bsdgrep | grep gnu
>  libgnuregex.so.5 => /usr/lib/libgnuregex.so.5 (0x800e82000)
> И это неспроста,

Конечно неспроста, правда не обязательно по причине озвученных фантазий анонимных знатоков.
man src.conf


WITHOUT_GNU_GREP_COMPAT
             Set this option to omit the gnu extensions to grep from being
             included in BSD grep

more /usr/src/usr.bin/grep/Makefile

.if ${MK_GNU_GREP_COMPAT} != "no"
CFLAGS+= -I${DESTDIR}/usr/include/gnu
LIBADD+=        gnuregex
.endif


> ибо фряшная реализация регулярок с0сёт.

Предпочитаю гнутый греп из портов, а не замороженное это-самое-мамонта.


Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

25. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 18:56 
> gnu extensions to grep

Дело даже не в гнутых расширениях, без них можно жить. Но то, что BSD-POSIX регулярки почему-то считают пустое (под)выражение синтаксической ошибкой люто бесит.

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

19. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от iZEN email(ok) on 04-Июл-17, 16:38 
В релизе GNU grep. (Твой вывод говорит о том, что ты не забумываешься о перекомпиляции FreeBSD и о переходе на BSD grep, который включается опцией WITH_BSD_GREP=true в /etc/src.conf).
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

31. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Andrey Mitrofanov on 04-Июл-17, 20:36 
> В релизе GNU grep.

Ой, и https://wiki.freebsd.org/GPLinBase правда.

Соболезнования. Как вас Эппл-то -- во имя Всепобеждающего Пермиссива -- истязает. Бедненькие!


---Век грядущий, век 22-ой, успокоит меня, сударыня?!
..."Ждём FreeBSD 10+" Team. Основатель.

http://www.opennet.dev/openforum/vsluhforumID3/68588.html#53&...//Семь лет ждал он!
http://www.opennet.dev/openforum/vsluhforumID3/108834.html#24
http://www.opennet.dev/openforum/vsluhforumID3/111284.html#97

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

27. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 04-Июл-17, 19:48 
Тем что менее распространен и местами не совместим.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

39. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Led (ok) on 04-Июл-17, 23:49 
> Чем GNU grep лучше BSD grep?

Тем же, чем homo sapiens лучше изеня.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

43. "Выпуск утилиты GNU grep 3.1"  –3 +/
Сообщение от iZEN (ok) on 05-Июл-17, 00:43 
>> Чем GNU grep лучше BSD grep?
> Тем же, чем homo sapiens лучше изеня.

Невероятно жгёшь.


Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

15. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от ALex_hha (ok) on 04-Июл-17, 14:50 
> Ничего не мешает написать какой-то perg на Rust+Lua с нардами и инкассаторшами. Сказать что он безопасней и хипстеры перебегут за пару недель. Но никто не пишет же. А почему?

вроде пару лет назад была мания все переписывать на go, там уже маразм доходил до переписывания ls на go. Но вроде уже наигрались и забросили

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

26. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от pantheongod email on 04-Июл-17, 19:45 
Сейчас стали шутить в стиле: "Мне теперь с Go на Rust это переписывать, да?" Я совсем не эксперт, но привычка писать на Go, как мне кажется, появилась после удачных волн маркетинга (у гугла с этим проблем не было никогда, на мой взгляд). Сейчас весь этот "накал страстей" явно спадает
Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

37. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от Аноним (??) on 04-Июл-17, 22:56 
Маркетинг удачный, да. Теперь мульярды на ём рубят.
Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

47. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 05-Июл-17, 06:26 
> На платформе Windows

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

52. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Аноним (??) on 05-Июл-17, 23:46 
Ты шеллы с околошелловой шайкой-братией не путай.
Ответить | Правка | ^ к родителю #47 | Наверх | Cообщить модератору

57. "Выпуск утилиты GNU grep 3.1"  +/
Сообщение от Andrey Mitrofanov on 06-Июл-17, 09:57 
> Ты шеллы с околошелловой шайкой-братией не путай.

В винде нет композиции "других" инструментов, как coreutils-ов "около" шела.

Поэтому "у них" каждый раз вижуял бейсик получается.

Ответить | Правка | ^ к родителю #52 | Наверх | Cообщить модератору

59. "Выпуск утилиты GNU grep 3.1"  –1 +/
Сообщение от й on 06-Июл-17, 18:39 
git.exe без diff.exe не работает. вы, конечно, можете рассказать линусу, что ему срочно надо переписать всё на powershell, но результат предсказуем.
Ответить | Правка | ^ к родителю #47 | Наверх | Cообщить модератору

60. "Выпуск утилиты GNU grep 3.1"  +1 +/
Сообщение от Аноним84701 (ok) on 06-Июл-17, 19:13 
>> На платформе Windows
> Зачем у них же там есть свой, как они любят выражаться, лучший  powershell пусть на нем изворачиваются.

Да, чего только свои собственные, "неудаляемые", алиасы для curl/wget стоят. Зато ООП и молодежность во все поля.

https://github.com/PowerShell/PowerShell/pull/1901
> initialsession: remove curl and wget aliases
> They block use of the commonly used command line tools without providing even an attempt to offer the same functionality. They serve no purpose for PowerShell users but cause confusion and problems to existing curl and wget users

Jason Shirk, Software engineer on @PowerShell:
> Your change would only affect Windows PowerShell (the version of PowerShell that ships in Windows). Those aliases have existed for multiple releases, so removing them would be a breaking change.
> We are rejecting this PR as it introduces "Unacceptable Changes", see our breaking change contract.
>

Ответить | Правка | ^ к родителю #47 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру