基于此,我正在运行命令
< /dev/urandom hexdump -v -e '/1 "%u\n"' |
awk '{ split("0,2,4,5,7,9,11,12",a,",");
for (i = 0; i < 1; i+= 0.0001)
printf("%08X\n", 100*sin(1382*exp((a[$1 % 8]/12)*log(2))*i)) }' |
xxd -r -p |
sox -traw -r44100 -b16 -e unsigned-integer - -tcoreaudio
Run Code Online (Sandbox Code Playgroud)
我注意到 awk 使用的内存在此命令运行时不断增长,例如在播放 75MB 的原始音频数据时消耗了超过 500MB 的内存。管道中的所有其他命令都保持恒定的内存量。
awk 使用此内存的目的是什么,是否有替代方案可以仅使用恒定数量的内存进行预期的流处理?
如果 awk 版本很重要:
? awk --version
awk version 20070501
Run Code Online (Sandbox Code Playgroud)
这是我根据 Thomas Dickey 的回答测试的命令:
< /dev/urandom hexdump -v -e '/1 "%u\n"' |
awk 'BEGIN { split("0,2,4,5,7,9,11,12",a,",") }
{ for (i = …Run Code Online (Sandbox Code Playgroud)