Linux вывести уникальные строки

Find unique lines

I think the reason sort file | uniq shows all the values 1 time is because it immediately prints the line it encounters the first time, and for the subsequent encounters, it just skips them.

13 Answers 13

uniq has the option you need:

 -u, --unique only print unique lines 
$ cat file.txt 1 1 2 3 5 5 7 7 $ uniq -u file.txt 2 3 

I copy your data and run it and it works: sortfileb.txt . Maybe you left out the extensions. I am using a Mac OS X. you have to go from filea.txt to some other fileb.txt

There is no need for the redirection with sort and what’s the point of piping to uniq when you could just do sort -u file -o file what you’re doing is removing the duplicate values i.e your fileb contains 1,2,3,5,7 the OP wants the unique lines only which is 2,3 and is achieved by uniq -u file File extension has nothing to with it, your answer is wrong.

You could also print out the unique value in «file» using the cat command by piping to sort and uniq

sort -u input_filename > output_filename 

While sort takes O(n log(n)) time, I prefer using

awk ‘!seen[$0]++’ is an abbreviation for awk ‘!seen[$0]++ ‘ , print line(=$0) if seen[$0] is not zero. It take more space but only O(n) time.

this sort data and filter by unique values

Читайте также:  Gui process manager linux

uniq -u has been driving me crazy because it did not work.

So instead of that, if you have python (most Linux distros and servers already have it):

Assuming you have the data file in notUnique.txt

#Python #Assuming file has data on different lines #Otherwise fix split() accordingly. uniqueData = [] fileData = open('notUnique.txt').read().split('\n') for i in fileData: if i.strip()!='': uniqueData.append(i) print uniqueData ###Another option (less keystrokes): set(open('notUnique.txt').read().split('\n')) 

Note that due to empty lines, the final set may contain » or only-space strings. You can remove that later. Or just get away with copying from the terminal 😉

Just FYI, From the uniq Man page:

«Note: ‘uniq’ does not detect repeated lines unless they are adjacent. You may want to sort the input first, or use ‘sort -u’ without ‘uniq’. Also, comparisons honor the rules specified by ‘LC_COLLATE’.»

One of the correct ways, to invoke with: # sort nonUnique.txt | uniq

Example run:

$ cat x 3 1 2 2 2 3 1 3 $ uniq x 3 1 2 3 1 3 $ uniq -u x 3 1 3 1 3 $ sort x | uniq 1 2 3 

Spaces might be printed, so be prepared!

Источник

COREUTILS. Команда uniq. Вывод уникального содержимого

Общий синтаксис программы uniq в linux предельно простой:

unic [OPTIONS] [INPUT [OUTPUT]]

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

Нельзя, разумеется, забывать, что вы должны находится именно в той дирректории, где и лежит файл my_text_file. Иначе uniq необходимо передать полный путь до файла в linux:

Неуникальные строки можно посчитать. Для этого передайте quic в качестве опции ключ «-c».

unic -c /home/user/my_text_file

В выводе вы получите таблицу из 2-х колонок, в первой будет указано количество повторяющихся строк, во второй их значение.

В linux uniq также можно попросить печатать только те строки, которые имеют дубликаты, для этого нужно использовать ключ «-d»:

uniq -d /home/user/my_text_file

Опции можно комбинировать, и чтобы посчитать только строки которые имеют дубликаты, следует ввести такую команду:

uniq -d -с /home/user/my_text_file

Читайте также:  Linux find file that ends with

В противовес ключу «-d» есть ключ «-u», заставляющий uniq выводить только строки, не имеющие дубликата:

uniq -u /home/user/my_text_file

Однако, как мы и освещали в вводой части, uniq работает только последовательно, следовательно строки, содержащиеся в файле, например:

не будут считаться уникальными. Чтобы разрешить эту проблему можно использовать в linux команду uniq совместно с командой sort, перенаправляя вывод одной команды на ввод другой:

sort -n my_text_file | uniq

или же просто использовать sort с ключом «-u»

Возможности и примеры использования утилиты sort мы уже освещали в статье COREUTILS. Команда sort. Сортировка вывода программ

Источник

Команда Linux uniq

В Linux команда uniq отфильтровывает повторяющиеся строки в файле, то есть она помогает обнаруживать повторяющиеся строки и удалять их.

Использование команды uniq в Linux с примерами

Отфильтрованные данные утилита записывает в выходной файл.

Синтаксис

Опции

-c, —count Выводить число повторов в начале каждой строки -d, —repeated Выводить только повторяющиеся строки, одну для каждой группы -D Вывести все повторяющиеся строки —all-repeated[=МЕТОД] Подобно -D , но позволяет разделять группы пустой строкой; МЕТОД= -f, —skip-fields=N Не сравнивать первые N полей —group[=МЕТОД] Показать все элементы, разделяя группы пустой строкой; МЕТОД= -i, —ignore-case Игнорировать регистр при сравнении -s, —skip-chars=N Не сравнивать первые N символов -u, —unique Выводить только неповторяющиеся строки -z, —zero-terminated Разделитель строк NUL, а не символ новой строки -w, —check-chars=N Сравнивать первые N символов строк

Полем считается последовательность пробельных символов (обычно, пробелы и/или TAB), за которой следуют непробельные символы. Сначала пропускаются поля, потом символы.

Примеры использования команды uniq в Linux

Простой пример

Содержимое исходного файла:

oleg@mobile:~/Directory:$ cat usa-states-example1.txt Айдахо (ID) Айдахо (ID) Айова (IA) Айова (IA) Алабама (AL) Алабама (AL) Аляска (AK) Аляска (AK) Аризона (AZ) Аризона (AZ) Арканзас (AR) Арканзас (AR) oleg@mobile:~/Directory:$ 

Приведённый файл содержит повторяющиеся строки. Используем команду uniq для их удаления:

oleg@mobile:~/Directory:$ uniq usa-states-example1.txt Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) oleg@mobile:~/Directory:$ 
oleg@mobile:~/Directory:$ cat usa-states-example1.txt Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) oleg@mobile:~/Directory:$

Строки были выстроены в алфавитном порядке, но повторы не были удалены, так как для их удаления необходимо указать выходной файл. Повторяем, записывая вывод в файл usa-states-example2.txt :

Читайте также:  Xbox remote play linux

Содержимое исходного файла:

oleg@mobile:~/Directory:$ cat usa-states-example1.txt Айдахо (ID) Айдахо (ID) Айова (IA) Айова (IA) Алабама (AL) Алабама (AL) Аляска (AK) Аляска (AK) Аризона (AZ) Аризона (AZ) Арканзас (AR) Арканзас (AR) oleg@mobile:~/Directory:$ 

Выполняем команду Linux uniq с записью результата в выходной файл:

oleg@mobile:~/Directory:$ uniq usa-states-example1.txt usa-states-example2.txt
oleg@mobile:~/Directory:$ cat usa-states-example2.txt Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) oleg@mobile:~/Directory:$ 

Команда Linux uniq не обнаруживает повторяющиеся строки, если они не смежные. Вы можете сначала выполнить сортировку, или использовать sort -u без uniq .

Количество повторений строки

В данном случае используется опция -c :

oleg@mobile:~/Directory:$ uniq -c usa-states-example1.txt 2 Айдахо (ID) 2 Айова (IA) 2 Алабама (AL) 2 Аляска (AK) 2 Аризона (AZ) 2 Арканзас (AR) oleg@mobile:~/Directory:$ 

В начале каждой строки было выведено число её повторений.

Вывод повторяющихся строк

Для вывода лишь повторяющихся строк используется опция -D :

oleg@mobile:~/Directory:$ uniq -D usa-states-example1.txt Айдахо (ID) Айдахо (ID) Айова (IA) Айова (IA) Алабама (AL) Алабама (AL) Аляска (AK) Аляска (AK) Аризона (AZ) Аризона (AZ) Арканзас (AR) Арканзас (AR) oleg@mobile:~/Directory:$ 

Вывод уникальных строк

Для вывода строк с отстутствием дублей используется опция -u :

oleg@mobile:~/Directory:$ uniq -u usa-states-example1.txt oleg@mobile:~/Directory:$ 

Результат отрицателен, так как все строки дублированы.

Нечувствительность к регистру

Использование опции -i позволяет сделать сравнение нечувствительным к регистру:

oleg@mobile:~/Directory:$ uniq -i usa-states-example1.txt Айдахо (ID) Айова (IA) Алабама (AL) Аляска (AK) Аризона (AZ) Арканзас (AR) oleg@mobile:~/Directory:$ 

Заключение

В этой небольшой статье были приведены основные примеры использования в Linux команды uniq . Из примеров можно сделать вывод, что эта утилита будет весьма полезна тем, кто занят быстрой фильтрацией информации из больших файлов, но не имеет времени на её вычитывание.

Источник

Оцените статью
Adblock
detector