テキストファイルを配列に読み込み、要素を抽出してソートするのに非常に時間がかかります。配列から文字列をソートするのに長い時間がかかります
テキストファイルは、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