LINUX.ORG.RU
ФорумAdmin

.bash_history и скриптик


0

0

Ни у кого нет скриптика для: Вот файле истории bash есть команды которые повторяются по 10-20 раз, хотелось бы чтобы скрипт удалял все повторяющиеся команды и оставлял только одну эту команду без повторов. Скрипт жедательно на bash.

Для чего это надо, просто я очень часто пользуюсь history | grep <то что надо>, и чтоб этот файл не очень быстро заполнялся, хотя у меня и так на историю стоит 999999 команд, но хотелось бы от таких повторов его периодически чистить.

anonymous

на awk чего-нибудь подобного сваять можно.

man awk

gr_buza ★★★★
()
Ответ на: комментарий от dilmah

> и ещe man bash потому Что он вроде умеет не сохранять повторные

Он, зараза, повторы убирает только если они подряд идут.

Rock
()
Ответ на: комментарий от grustnoe

sort -u Хорошо, но он обязательно сортирует
uniq не работает, вот:
$ cat test
as
va
as
qw
re
da
sa
qw
linux
proverka
tebya
linux
proverka
nerabotaet

$ uniq test
as
va
as
qw
re
da
sa
qw
linux
proverka
tebya
linux
proverka
nerabotaet

$ uniq -c test
1 as
1 va
1 as
1 qw
1 re
1 da
1 sa
1 qw
1 linux
1 proverka
1 tebya
1 linux
1 proverka
1 nerabotaet
1
$
Почему??

anonymous
()

$ cat rrr.pl
asd
uuu
qwe
qwe
asd
asd
qwe
rrr
rrr
asd
rrr
uuu
$ perl -0777 -ane 'print join "\n" =>grep {!$_{$_}++} split /\n/;print "\n"' rrr.pl > eee.txt; cp eee.txt rrr.pl
$ cat rrr.pl
asd
uuu
qwe
rrr
$

anonymous
()
Ответ на: комментарий от anonymous

>perl -0777 -ane 'print join "\n" =>grep {!$_{$_}++} split /\n/;print "\n"' rrr.pl > eee.txt; cp eee.txt rrr.pl

Спасибо, то что надо, но вот почему не работает uniq??? Дистрибутив RH9, локаль UTF8. Или это только у меня такие глюки??

anonymous
()
Ответ на: комментарий от anonymous

>мм.. почему бы не попробовать Ctrl-R и не мучаться? За это тоже спасибо...

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Точно, спасибо.... "Для того, чтобы повторяющиеся строки были обнаружены, они должны быть соседними" Но по мне, так это не правильно, универсальнее бы было, еслиб не обязательно соседние строки сравнивались..

anonymous
()
Ответ на: комментарий от anonymous

не, все нормально, в 99% случаев стандартных башевских утилит вполне хватает...

anonymous
()
Ответ на: комментарий от anonymous

Тогда, однако, будут повышены требования к ресурсам. А так, uniq почти не использует дополнительной памяти (на одну строку) и почти не загружает процессор, и, таким образом, может обрабатывать потоки неограниченной длины.

anonymous
()
Ответ на: комментарий от anonymous

> но он, однако, и не решает поставленной задачи...

Что значит поставленной? Дай мне прогу и я поставлю ей такую задачу,
которую она не сможет решить. uniq делает достаточно.

nl -w1 -s\  .bash_history | sort -t\  -k2 -u | sort -n | cut -d\  -f2-

Rock
()

Эх, не говори, кума, у самой муж пьяница...
Вот здесь когда то была страничка какого то Temofey:
http://www.sit.kiev.ua/linux/
И лежал у него там advancedhistory.tgz, добавлявший тройку функций для
манипуляций с history, во главу угла было поставлено именно то о чем ты
вопрошаешь.

Странички больше нет, или она переехела. Указаный в редми емайл возможно
тоже молчит temofey _AT_ sit.kiev.ua.

PS: Все сделано средствами баша!

anonymous
()

awk '! seen[$0]++' test.txt

anonymous
()
Ответ на: комментарий от anonymous

> Глубоко уважаемый Rock, а где же у вас uniq? Ж)))

man sort, опция -u

Rock
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.