Чтение текстового файла в массив, извлечение элементов и их сортировка занимают очень много времени.Сортировка строк из массива занимает много времени
Текстовый файл представляет собой вывод консоли ffmpeg для анализа звука R128. Мне нужно получить наивысшие значения M и S. Пример:
[Parsed_ebur128_0 @ 0x7fd32a60caa0] t: 4.49998 M: -22.2 S: -29.9 I: -27.0 LUFS LRA: 9.8 LU FTPK: -12.4 dBFS TPK: -9.7 dBFS
[Parsed_ebur128_0 @ 0x7fd32a60caa0] t: 4.69998 M: -22.5 S: -28.6 I: -25.9 LUFS LRA: 11.3 LU FTPK: -12.7 dBFS TPK: -9.7 dBFS
Текстовый файл может быть сотни или тысячи строк в зависимости от продолжительности звукового файла анализируемой
Я хочу, чтобы найти самую высокую M (-22.2) и S значения (-28.6) и назначить их переменным M и S
Это то, что я использую в настоящее время:
ARRAY=()
while read LINE
do
ARRAY+=("$LINE")
done < $tempDir/text.txt
for LINE in "${ARRAY[@]}"
do
echo "$LINE" | sed -n ‘/B:/p' | sed 's/S:.*//' | sed -n -e 's/^.*M://p' | sed -n -e 's/-//p' >>/$tempDir/R128M.txt
done
for LINE in "${ARRAY[@]}"
do
echo "$LINE" | sed -n '/M:/p' | sed 's/I:.*//' | sed -n -e 's/^.*S://p' | sed -n -e 's/-//p' >>$tempDir/R128S.txt
done
cat $tempDir/R128M.txt
M=($(sort $tempDir/R128M.txt))
cat $tempDir/R128S.txt
S=($(sort $tempDir/R128S.txt))
есть ли более быстрый способ сделать это?
Да. Обычно не принято писать в скрипте bash для его скорости. Даже подходящий скрипт perl, вероятно, даст вам порядок увеличения скорости здесь, особенно учитывая, что он в основном обрабатывает регулярные выражения. – davmac