Частая ошибка: пытаться обработать большой файл, загружая его целиком в память.
Например:
content=$(cat huge.log)
Если файл весит несколько гигабайт - скрипт может съесть всю RAM или просто упасть.
Правильный подход - обрабатывать файл потоково.
▪️ Чтение файла построчно. Самый безопасный способ:
while IFS= read -r line; do
echo "$line"
done < huge.log
файл читается строка за строкой;
память почти не используется;
можно обрабатывать очень большие файлы.
▪️ Использование grep / awk. Unix-утилиты работают потоково, поэтому идеально подходят для больших файлов. Например:
grep ERROR huge.log
или:
awk '/ERROR/ {print $0}' huge.log
Они читают файл частями, не загружая его полностью.
▪️ Анализ логов. Быстрый пример анализа:
grep ERROR huge.log | awk '{print $5}' | sort | uniq -c
Это обработает гигабайтные логи за секунды.
▪️ tail для живых логов. Если файл постоянно растет:
tail -F huge.log
Можно фильтровать сразу:
tail -F huge.log | grep ERROR
Это удобно для мониторинга сервисов.
▪️ Чтение файла частями. Иногда нужно обрабатывать батчами:
split -l 100000 huge.log part_
Файл разобьется на куски:
part_aa
part_ab
part_ac
Теперь их можно обрабатывать параллельно.
BashTex 📱 #bash #utils