假设您的流表示不断变化的数字参数,它可以通过 hexdump 或 coreutils 中的 od 转换。请注意,强烈建议将 stdbuf 用于实时流处理。
# Print decimal byte values per line
stdbuf -oL hexdump -v -e '1/1 "%u\n"'
# Floating point values
stdbuf -oL hexdump -v -e '1/4 "%f\n"'
使用 coreutils 中的 od 进行输入字节序校正:
# unsigned 8-bit
stdbuf -oL od -v -An -w7 -tu1 --endian=little
# signed 32-bit
stdbuf -oL od -v -An -w4 -tu4 --endian=little
# Float 32-bit
stdbuf -oL od -v -An -w4 -tf4 --endian=little
除非字节序有问题,否则由于良好的格式支持,hexdump 可能更可取 - 几乎就像 printf:
cat /dev/urandom \
| stdbuf -oL hexdump -v -e '1/4 "%i" 1/4 " %i" 1/4 " %f\n"' \
| stdbuf -oL awk '{ print "("$1" + "$2") * "$3" = ", $1 + $2 * $3 }'
一些毫无意义的 8 位流数学,例如
# Replace the >/dev/null safeguard to actually try it
cat /dev/urandom \
| stdbuf -oL hexdump -e '1/1 " %i" 1/1 " %i" "\n"' \
| {
while read a b; do
r=$(( (a + b) / 2 ))
printf "printf \"\%03o\"" $r
done
} | sh >/dev/null