Премахване на дублиращи се редове с uniq
Премахване на дублиращи се редове с uniq
Дублиращите се редове не са често проблем, но понякога е проблем. И когато това се случи, е необходима допълнителна работа за филтрирането им. Уникалната помощна програма е много полезна по този въпрос. Вижте как можете да спестите време и да избегнете главоболия.
След като сортирате текстовия файл, може да забележите, че някои редове се повтарят. Понякога тази дублирана информация не е необходима и може да бъде премахната, за да спести място на диска. Редовете във файла не трябва да бъдат сортирани, но трябва да запомните, че uniq сравнява редовете, докато чете, и премахва само два или повече съседни реда. Следните примери показват как това работи на практика:
Честит рожден ден!
Честит рожден ден!
Честит рожден ден, скъпи Тукс!
Честит рожден ден!
Честит рожден ден, скъпи Тукс!
Честит рожден ден!
Честит рожден ден!
Честит рожден ден!
$ sort happybirthday.txt uniq
Честит рожден ден, скъпи Тукс!
Честит рожден ден!
Не забравяйте, че е лоша идея да използвате uniq или други помощни програми за премахване на дублирани редове във файлове, съдържащи финансова или друга важна информация. В такива файлове повтарящите се редове показват друг превод на пари към същата сметка и изтриването им може да доведе до проблеми в отношенията с данъчните власти. Не прави това!
Ами ако искате да улесните работата си и да изведете само уникални или само дублирани редове от файл? Можете да направите това с опциите -u (уникален) и -d (дублиращ се):
$ sort happybirthday.txt uniq -u
Честит рожден ден, скъпи Тукс!
$ sort happybirthday.txt uniq -d
Честит рожден ден!
ВиеМожете също да получите някои статистики с опцията -c:
$ sort happybirthday.txt uniq -uc
1 Честит рожден ден, скъпи Тукс!
$ sort happybirthday.txt uniq -dc
3 Честит рожден ден на теб!
Има друга опция, -s, която работи по същия начин като -f, но пропуска определения брой знаци. Можете да използвате -s и -f заедно. Първо премахнете полетата, след това знаците. Но какво ще стане, ако искате да видите низове само с дадени знаци? Опитайте опцията -w.