TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #314 1.11K
Оптимизация вложенных циклов и массивов

Вложенные циклы в bash - частая причина медленных скриптов при работе с большими массивами и файлами. Особенно если ты обрабатываешь 10000+ элементов и каждый проход делает grep, awk, cut, cat, sed...

▪️ Антипаттерн


for i in "${list1[@]}"; do
for j in "${list2[@]}"; do
if [[ "$i" == "$j" ]]; then
echo "Match: $i"
fi
done
done


➖ Это O(N²). Если массивы по 10к строк - будет 100 млн сравнений.

▪️ Оптимизация через associative array (Bash 4+)


declare -A lookup

# Заполняем хеш
for item in "${list2[@]}"; do
lookup["$item"]=1
done

# Ищем быстро
for i in "${list1[@]}"; do
if [[ ${lookup["$i"]+found} ]]; then
echo "Match: $i"
fi
done


➕ Это уже O(N). И в 1000 раз быстрее.

▪️ Ускорение чтения данных. Избавляемся от cat в цикле:

➖ Плохо:


while read line; do
cat "$line"
done < files.txt


➕ Лучше:


mapfile -t files < files.txt

for f in "${files[@]}"; do
cat "$f"
done


▪️ Убираем лишние циклы. Когда можно - переноси логику внутрь awk, grep, join, sort -m и т.д.

Пример: пересечение двух файлов без bash-циклов:


sort file1.txt file2.txt | uniq -d


BashTex 📱 #bash #utils
  • 👍 9
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
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 →