将文本文件读入数组中,提取元素并对它们进行排序需要很长时间。从数组中排序字符串需要很长时间
该文本文件是用于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