Ви можете використовувати команду sortз опцією --unique:
sort -u input-file
Якщо ви хочете записати результат у FILE замість стандартного виводу, використовуйте параметр --output=FILE:
sort -u input-file -o output-file
Команда uniqтакож може бути застосована. У цьому випадку однакові рядки повинні бути послідовними, тому введення має бути попередньо відсортовано - завдяки @RonJohn за цю примітку:
sort input-file | uniq > output-file
Я як sortкоманди для подібних випадків, з - за свою простоту, але якщо ви працюєте з великими масивами awkпідхід від John1024 в відповіді може бути більш потужним. Ось порівняння часу між згаданими підходами, застосованими до файлу (на основі наведеного вище прикладу) з майже 5 мільйонами рядків:
$ cat input-file | wc -l
20000000
$ TIMEFORMAT=%R
$ time sort -u input-file | wc -l
64
7.495
$ time sort input-file | uniq | wc -l
64
7.703
$ time awk '!a[$0]++' input-file | wc -l # from John1024's answer
64
1.271
$ time datamash rmdup 1 < input-file | wc -l # from αғsнιη's answer
64
0.770
Інша істотна відмінність полягає в тій, яку згадує @Ruslan :
sort -uбуде надрукувати результат лише після закінчення введення, в той час як ця awkкоманда буде друкувати кожну нову рядок результатів на льоту (це може бути важливіше для конвеєрного введення, ніж файл).
Ось ілюстрація:

У наведеному вище прикладі цикл (показаний нижче) генерує 500 випадкових комбінацій, кожна з яких має три символи, з літер AD. Ці комбінації передаються на awkабо sort.
for i in {1..500}; do cat /dev/urandom | tr -dc A-D | head -c 3; echo; done