Удалить дубликаты строк в файле ~/.bash_history без сортировки

Возникла тут одна задачка…

Заметил что несмотря на включение опции export HISTCONTROL=ignorespace:erasedupserasedups как бы ответственна за несохранение дубликатов строк в терминале) файл ~/.bash_history все равно разрастается за счет этих самых дубликатов… HISTFILESIZE установлен довольно большой однако раздражает не размер файла а другое: при входе в новый терминал все эти дубликаты строк листаются при прокрутке вниз/вверх :(

Можно конечно не заморачиваться и воспользоваться sort | uniq однако этот способ отсортирует результат а для меня важно чтобы сохранился порядок введенных команд (то бишь строк в этом файле). Немного полистав мануалы составил команду для того чтобы удалить дубликаты строк в файле ~/.bash_history без сортировки:

cat ~/.bash_history | awk '!($0 in a) {a[$0];print}' > ~/.bash_history.tmp && mv -f ~/.bash_history.tmp ~/.bash_history

Строка выше делает следующее: сначала читает строки из файла ~/.bash_history затем не сортируя удаляет повторяющиеся строчки и записывает результат в файл ~/.bash_history.tmp после чего заменяет им старый файл (mv -f означает что при замене не спрашивать ничего).

Естественно это можно использовать для любых текстовых файлов заменив ~/.bash_history на путь к необходимому файлу…


Оригинал статьи http://pingvinoff.net/2015/04/02/udalit-dublikaty-bash-hist/

0 комментариев

Оставить комментарий