將文本文件讀入數組中,提取元素並對它們進行排序需要很長時間。從數組中排序字符串需要很長時間
該文本文件是用於R128音頻分析的ffmpeg控制檯輸出。我需要獲得最高的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