Я использую этот фрагмент кода в своем bash-скрипте, чтобы прочитать файл, содержащий несколько шестнадцатеричных строк, выполнить некоторую подстановку и затем записать его в новый файл. Требуется около 30 минут для примерно 300 Мб.
Мне интересно, можно ли это сделать быстрее?
sed 's,[0-9A-Z]\{2\},\\\\x&,g' ${in_file} | while read line; do
printf "%b" ${line} >> ${out_file}
printf '\000\000' >> ${out_file}
done
Обновление:
Я провел некоторое тестирование и получил следующие результаты:
Победитель:
sed 's,[0-9A-Z]\{2\},\\\\x&,g' ${in_file} | while read line; do
printf "%b" ${line} >> ${out_file}
printf '\000\000' >> ${out_file}
done
реальный 44m27.021s
пользователь 29m17.640s
sys 15m1.070s
sed 's,[0-9A-Z]\{2\},\\\\x&,g' ${in_file} | while read line; do
printf '%b\000\000' ${line}
done >> ${out_file}
реальный 18m50.288s
пользователь 8m46.400s
sys 10m10.170s
export LANG=C
sed 's/$/0000/' ${in_file} | xxd -r -ps >> ${out_file}
реальный 0m31.528s
пользователь 0m1.850s
sys 0m29.450s