TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #776 10.9K
Просто напомню. Для получения уникальных значений файла служит программа uniq. Беда в том, что она работает только с отсортированными данными.

🔤🔤🔥🔤🔤🔤🔤

sort "filename"|uniq

ㅤ
Я уже также приводил конструкцию на awk которая извлекает из файла уникальные значения, но без требования сортировки:

awk '!a[$0]++' $RF


Она основана на использовании ассоциативных массивов, у которых ключ (текстовый индекс) всегда уникален.

Алгоритм описан здесь.


Я подумал, что на bash такое тоже можно реализовать, ведь в bash тоже есть ассоциативные массивы. Да, конечно не так изящно, и уж, конечно, не быстро. Но зато чистый bash. Но может кому-то пригодится. Приведу сразу все примеры:


#!/bin/bash

clear
declare RF="./rnd_file.txt"
:> $RF # создали файл 10000 значений
# в диапазоне 0-4
for i in {1..10000};do
echo $(($SRANDOM%5))>>$RF
done

echo '#results'
echo '#sort|uniq'
sort $RF|uniq

echo '#uniq on AWK'
awk '!a[$0]++' $RF

echo '#uniq on #BASH'
declare -A A=
cat $RF |
while read -e rec;do
((A["$rec"]++)) || echo "$rec"
done

#results
#sort|uniq
#0
#1
#2
#3
#4
#uniq on AWK
#1
#2
#4
#0
#3
#uniq on #BASH
#1
#2
#4
#0
#3


Напомню, что алгоритм на awk/bash держит весь массив уникальных значений в памяти, поэтому при больших файлах ее может потребоваться много. Хотя при реализации на bash, Вы скорее умрете от старости, чем закончится память :-)

tags: #bash #linux
—
🔔 @bashdays➡️ @gitgate
More from @bashdays
  1. Sep 24, 2026Post #1565
  2. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  3. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  4. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  5. Sep 11, 2026🤖 DevOps в эпоху AI трансформации: что работает уже сейчас! 17 сентября Сбер собирает Dev…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →