Я просто хочу знать, нужно ли перенаправлять вывод в другие файлы. (например: напишите несколько файлов по 2000 строк)
Разделение на большее количество файлов не обязательно приведет к более быстрому выполнению. Это иллюстрируют три простых тестовых примера. В каждом из этих трех случаев печатается 3 миллиона строк. Они перечислены в порядке скорости выполнения, от самой быстрой до самой медленной.
Одно перенаправление вне цикла
для i в $ (seq $ ((3000000/2000))); do seq 2000; done> file
Добавление к тому же файлу внутри цикла
для i в $ (seq $ ((3000000/2000))); сделать seq 2000 >> file; done
Разделение вывода на несколько файлов
для i в $ (seq $ ((3000000/2000))); do seq 2000> file $ i; done
Последние команды постоянно занимают больше пользовательского и системного времени, чем первые.
Из этого можно сделать вывод, что разделение на большее количество файлов не гарантирует увеличения производительности в этом простом случае. Верно и обратное.
Количество операций ввода-вывода
Производительность зависит не только от размера файла, но также от количества операций ввода-вывода. При добавлении ( >>
) выполняется еще больше вызовов ввода-вывода для поиска до конца файла.
Этот первый сценарий выполняет операции ввода-вывода ( >>
) вне цикла for
:
$ cat outloop.sh
#!/bin/sh
>file
for i in $(seq 1 ${1:?})
do
echo $i
done >> file
Этот сценарий, с другой стороны, выполняет операции ввода-вывода ( >>
) на каждой итерации, внутри цикла for
:
$ cat inloop.sh
#!/bin/sh
>file
for i in $(seq 1 ${1:?})
do
echo $i >> file
done
Выполните и сравните, посмотрите, как расположение Оператор >>
влияет на производительность:
$ x=500000; time sh outloop.sh $x; time sh inloop.sh $x;
real 0m1.227s
user 0m0.389s
sys 0m0.859s
real 0m2.996s
user 0m0.809s
sys 0m2.197s
Размещение оператора перенаправления вне цикла удваивает производительность при записи 500000 строк (в моей системе).
Мне удалось заставить ветку git распечататься красным, изменив
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[93m\]\w\[\033[m\]\$(parse_git_branch)\[\033[00m\] \n$ "
с по
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[93m\]\w\[\033[31m\]\$(parse_git_branch)\[\033[00m\] \n$ "
Чтобы выделить конкретное изменение, использовалось [31m\]\$(parse_git_branch)
вместо [m\]\$(parse_git_branch)
Для этого можно использовать цветовые коды.
PS1='\e[31TextInRed\e[0m'
Где \e[31
отображает все на терминале в красном цвете, 31 — это цветовой код для красного цвета, а \e[0m
сбрасывает цвет обратно в нормальный, чтобы ваш терминал не перепутался (, т.е. весь текст будет окрашен в красный цвет ).
Подробнее о цветовых кодах читайте здесь