1.2, A.Stahl (ok), 09:21, 04/07/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +8 +/– |
>увеличена производительность
Вот. Молодцы. А ведь сколько есть проектов, которые были завершены и которые стоило лишь оптимизировать да допиливать по мелочам, поддерживая работоспособность в условиях изменяющегося окружения, но нет -- шило в жопе толкает разработчиков на переписывание всего нахрен почти с нуля.
| |
|
2.4, Аноним (4), 09:27, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
Потому что grep ничем уже не заменишь. Linux без grep что стол без ножки.
Будет хоть 10 крутых замен grep, а пользоваться всё равно будут им же.
| |
|
3.5, A.Stahl (ok), 09:45, 04/07/2017 [^] [^^] [^^^] [ответить]
| +3 +/– |
Ничего не мешает написать какой-то perg на Rust+Lua с нардами и инкассаторшами. Сказать что он безопасней и хипстеры перебегут за пару недель. Но никто не пишет же. А почему? Потому что проект неспешно и адекватно развивается (да, это камень в огород КДЕ-Гномеров)
| |
|
|
|
6.35, Аноним (-), 21:30, 04/07/2017 [^] [^^] [^^^] [ответить]
| –2 +/– |
> Совместимость?...
Отсутствие сомнстимости позволяет использовать более приятный синтаксис. Но да, делает эту штуку малополезной в скриптах.
| |
|
5.14, rshadow (ok), 14:33, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
Таких уже дофига было. Только быстрее оно в определенных случаях: на очень маленьких/больших текстах/шаблонах. А в среднем по скорости и переносимости хуже.
| |
|
6.30, лютый жабист__ (?), 20:34, 04/07/2017 [^] [^^] [^^^] [ответить]
| –5 +/– |
> Таких уже дофига было. Только быстрее оно в определенных случаях: на очень
> маленьких/больших текстах/шаблонах. А в среднем по скорости и переносимости хуже.
Победитель по принципу "среднее по больнице" это значит ни в чём не хорош. А ИТ развивается в направлении узкой специализации. Например вместо обсолютно одинаковых по ТТХ mysql/postgres/oracle пришли разные НОСКЛ и унесли 80% рынка. С ЯП так же, появилось множество языков со своей нишей и унесли 95% задач у мощной сишечки.
p.s. Что лучше, прога которая час занимает 2.5ГБ ОЗУ и 1 ядро на 100% или другая, которая ест 8ГБ на 5 секунд? 8))))
| |
|
7.32, Аноним (-), 20:46, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
а когда этих 8ГБ нет, прога просто падает не выполняя свою задачу
| |
|
|
9.36, Аноним (-), 22:29, 04/07/2017 [^] [^^] [^^^] [ответить] | +/– | Ну значит очень тупая попытка использования утилиты Я на 146 уверен что дело в... текст свёрнут, показать | |
|
10.61, . (?), 06:12, 07/07/2017 [^] [^^] [^^^] [ответить] | +2 +/– | Оно - жабист У них не руки а лапки Про мозги я их жалости - даже не буду С... текст свёрнут, показать | |
|
|
|
7.40, Led (ok), 23:53, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> p.s. Что лучше, прога которая час занимает 2.5ГБ ОЗУ и 1 ядро
> на 100% или другая, которая ест 8ГБ на 5 секунд? 8))))
Что, жаба не только съела память, но и часы остановила?
| |
|
|
5.44, OramahMaalhur (ok), 01:34, 05/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
>the usability of The Silver Searcher (similar to ack) with the raw speed of GNU grep
погодите, у The Silver Searcher (ag) вроде же всё в порядке со скоростью?
| |
|
4.29, лютый жабист__ (?), 20:27, 04/07/2017 [^] [^^] [^^^] [ответить]
| –5 +/– |
>Сказать что он безопасней и хипстеры перебегут за пару недель
Обозвал других хипстерами и сразу почуйствовал прилив крутизны?
В первую очередь все эти линуховые сишные утильки архитектурно убогие и тормозные, т.к. написаны во времена "640к хватит всем". Делаем чуть что сложнее банального grep -i blabla и приплыли.
Вот из прямо сейчас очередной факап грепа:
дано два файла с ОГРН (число 13 символов), в одном 4.5m, в другом 800k строчек. Надо сделать третий файл с содержимым f1 которого нет в f2.
grep -v -x -f f2 f1 >f3
съел 2.5ГБ рамы и задумался уже на много минут. Сервак с 12 ядрами, 100ГБ ОЗУ. И чё это грепу дало? В проге нормальной архитектуры это должно делаться за от силы 10 сек, а может и меньше 1.
| |
|
5.34, L.P. (?), 21:14, 04/07/2017 [^] [^^] [^^^] [ответить]
| +5 +/– |
> grep -v -x -f f2 f1 >f3
А за хлебом ты тоже на грузовике ездишь?
man uniq
man comm
| |
5.45, Аноним84701 (ok), 03:16, 05/07/2017 [^] [^^] [^^^] [ответить]
| +6 +/– |
> дано два файла с ОГРН (число 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ГБ
> Вот из прямо сейчас очередной факап грепа:
А может, проблема в прокладке между спинкой стула и монитором? :)
| |
5.51, Аноним (-), 20:10, 05/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Надо сделать третий файл с содержимым f1 которого нет в f2.
Ты grep с join перепутал, у жабистов это бывает.
| |
|
6.58, Andrey Mitrofanov (?), 10:39, 06/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
>> Надо сделать третий файл с содержимым f1 которого нет в f2.
> Ты grep с join перепутал, у жабистов это бывает.
[CODE]Important: FILE1 and FILE2 must be sorted on the join fields.[/CODE]
Мы тут стараемся, seq-и shuf[fle]-им, а вы хотите сказать надо было sort-ить?! Неслыханно. >>?<<
| |
|
|
|
|
4.28, angra (ok), 20:02, 04/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
Ну тогда уже perl, который заменяет собой сразу grep, sed, awk, tr, неинтерактивный шелл и кучу других утилит. Другое дело, что для простейших задач команда с grep получается короче, чем однострочник на perl.
| |
|
5.38, trolleybus (?), 23:04, 04/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
А еще лучше питон
print( {e for e in open("f1", "r")} - {e for e in open("f2", "r")} )
| |
|
6.41, VINRARUS (ok), 00:03, 05/07/2017 [^] [^^] [^^^] [ответить]
| –3 +/– |
А я умею на чистом 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
| |
|
7.48, Аноним (-), 10:05, 05/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
#!/bin/bash
gigi() {
local A
read -a A
echo "${A[$1-1]}"
}
echo "1a 2b 3c 4d 5e 6x 7y 8z" | gigi 5
| |
|
6.42, angra (ok), 00:16, 05/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
$ 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{$_},<>'
Только последний выводит в более удобном виде и читает в память только второй файл, что делает его более пригодным для практического использования.
| |
|
5.46, Andrey Mitrofanov (?), 06:13, 05/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Ну тогда уже 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 Максимальный резидентный размер процесса в течении его выполнения в килобайтах.
| |
|
6.53, angra (ok), 02:14, 06/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
Ты процитировал фразы о 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
| |
|
7.54, Аноним (-), 05:00, 06/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Ну как бы 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 миллионов паттернов в файле с более свободным форматом.
| |
|
8.55, angra (ok), 07:43, 06/07/2017 [^] [^^] [^^^] [ответить] | –1 +/– | А что тут странного Собственно сэта новость о новой версии, в которой определен... текст свёрнут, показать | |
|
7.56, Andrey Mitrofanov (?), 09:53, 06/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Ты процитировал фразы о 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 битовыми полями, чтобы накрутить пузомерку, првильно?
-
-
-
| |
|
8.63, . (?), 03:02, 08/07/2017 [^] [^^] [^^^] [ответить] | +1 +/– | Поленился чел просто, но я дожал bin bash awk -V 124 head -1 time awk ... текст свёрнут, показать | |
|
9.64, . (?), 06:52, 08/07/2017 [^] [^^] [^^^] [ответить] | +/– | python -V 124 head -1 time python - EOF seq 1000000000000 1000005000000 ... текст свёрнут, показать | |
|
10.65, Аноним (-), 15:33, 08/07/2017 [^] [^^] [^^^] [ответить] | –1 +/– | Python 2 7 13 4000000 real 0m20,490s user 0m16,934s sys 0m0,570s Убираем вездесу... текст свёрнут, показать | |
|
|
|
9.69, _ (??), 18:28, 11/07/2017 [^] [^^] [^^^] [ответить] | –2 +/– | Не КО - а ко-ко-ко Потому как наступишь в гов W - на то что скорость дисков ... текст свёрнут, показать | |
|
|
7.68, Andrey Mitrofanov (?), 09:30, 10/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> 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.
| |
|
|
|
|
|
|
1.6, Аноним (-), 09:49, 04/07/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А чего они никак less не догонят по версиям? Поднапрячься нужно парням!
| |
|
2.10, Andrey Mitrofanov (?), 11:56, 04/07/2017 [^] [^^] [^^^] [ответить]
| +16 +/– |
> Чем GNU grep лучше BSD grep?
Поциент, почему вы думаете, что ваш BSD grep хуже, чем GNU grep? Вас это беспокоит? Расскажите нам больше.
| |
2.16, Аноним (-), 15:32, 04/07/2017 [^] [^^] [^^^] [ответить]
| –2 +/– |
Ничем не лучше и не хуже:
$ 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.
| |
|
|
|
5.20, Andrey Mitrofanov (?), 16:58, 04/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
#>>>$ grep --version
#>>> grep (GNU grep) 2.5.1-FreeBSD
> Ох уж эти эксперты опеннета:
> % bsdgrep --version
> bsdgrep (BSD grep) 2.5.1-FreeBSD
Вот зачем ты так?! Изя же запутался! Фу таким быть.
| |
5.21, Аноним (-), 17:57, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> % bsdgrep --version
Ну и на фига он там, если им всё равно никто кроме пары маргиналов не пользуется?
| |
|
6.22, Аноним (-), 18:03, 04/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
К тому же
$ ldd /usr/bin/bsdgrep | grep gnu
libgnuregex.so.5 => /usr/lib/libgnuregex.so.5 (0x800e82000)
И это неспроста, ибо фряшная реализация регулярок с0сёт.
| |
|
7.23, Аноним (-), 18:33, 04/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> К тому же
> $ 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сёт.
Предпочитаю гнутый греп из портов, а не замороженное это-самое-мамонта.
| |
|
8.25, Аноним (-), 18:56, 04/07/2017 [^] [^^] [^^^] [ответить] | +/– | Дело даже не в гнутых расширениях, без них можно жить Но то, что BSD-POSIX регу... текст свёрнут, показать | |
|
|
|
|
|
3.19, iZEN (ok), 16:38, 04/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
В релизе GNU grep. (Твой вывод говорит о том, что ты не забумываешься о перекомпиляции FreeBSD и о переходе на BSD grep, который включается опцией WITH_BSD_GREP=true в /etc/src.conf).
| |
|
2.39, Led (ok), 23:49, 04/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Чем GNU grep лучше BSD grep?
Тем же, чем homo sapiens лучше изеня.
| |
|
3.43, iZEN (ok), 00:43, 05/07/2017 [^] [^^] [^^^] [ответить]
| –3 +/– |
>> Чем GNU grep лучше BSD grep?
> Тем же, чем homo sapiens лучше изеня.
Невероятно жгёшь.
| |
|
|
1.15, ALex_hha (ok), 14:50, 04/07/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
> Ничего не мешает написать какой-то perg на Rust+Lua с нардами и инкассаторшами. Сказать что он безопасней и хипстеры перебегут за пару недель. Но никто не пишет же. А почему?
вроде пару лет назад была мания все переписывать на go, там уже маразм доходил до переписывания ls на go. Но вроде уже наигрались и забросили
| |
|
2.26, pantheongod (?), 19:45, 04/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
Сейчас стали шутить в стиле: "Мне теперь с Go на Rust это переписывать, да?" Я совсем не эксперт, но привычка писать на Go, как мне кажется, появилась после удачных волн маркетинга (у гугла с этим проблем не было никогда, на мой взгляд). Сейчас весь этот "накал страстей" явно спадает
| |
|
1.47, Аноним (-), 06:26, 05/07/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> На платформе Windows
Зачем у них же там есть свой, как они любят выражаться, лучший powershell пусть на нем изворачиваются.
| |
|
|
3.57, Andrey Mitrofanov (?), 09:57, 06/07/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Ты шеллы с околошелловой шайкой-братией не путай.
В винде нет композиции "других" инструментов, как coreutils-ов "около" шела.
Поэтому "у них" каждый раз вижуял бейсик получается.
| |
|
2.59, й (?), 18:39, 06/07/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
git.exe без diff.exe не работает. вы, конечно, можете рассказать линусу, что ему срочно надо переписать всё на powershell, но результат предсказуем.
| |
2.60, Аноним84701 (ok), 19:13, 06/07/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
>> На платформе 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.
> | |
|
|