Tenho um script bash que pega um arquivo de propriedades simples e substitui os valores em outro arquivo. (O arquivo de propriedades é apenas linhas de propriedades do tipo 'foo=bar')
INPUT=`cat $INPUT_FILE`
while read line; do
PROP_NAME=`echo $line | cut -f1 -d'='`
PROP_VALUE=`echo $line | cut -f2- -d'=' | sed 's/\$/\\\$/g`
time INPUT="$(echo "$INPUT" | sed "s\`${PROP_NAME}\b\`${PROP_VALUE}\`g")"
done <<<$(cat "$PROPERTIES_FILE")
# Do more stuff with INPUT
No entanto, quando minha máquina tem carga alta (mais de quarenta anos), tenho uma grande perda de tempo em meus seds
real 0m0.169s
user 0m0.001s
sys 0m0.006s
Baixa carga:
real 0m0.011s
user 0m0.002s
sys 0m0.004s
Normalmente, perder 0,1 segundo não é um grande problema, mas tanto o arquivo de propriedades quanto os arquivos de entrada têm centenas/milhares de linhas e esses 0,1 segundo somam mais de uma hora de tempo desperdiçado.
O que posso fazer para consertar isso? Preciso apenas de mais CPUs?
Propriedades de exemplo (as linhas começam com um caractere especial para criar uma maneira de indicar que algo na entrada está tentando acessar uma propriedade)
$foo=bar
$hello=world
^hello=goodbye
Entrada de amostra
This is a story about $hello. It starts at a $foo and ends in a park.
Bob said to Sally "^hello, see you soon"
Resultado esperado
This is a story about world. It starts at a bar and ends in a park.
Bob said to Sally "goodbye, see you soon"