Command line 用脚本从元素上减去原始浮点文件?

Command line 用脚本从元素上减去原始浮点文件?,command-line,floating-point,binaryfiles,raw-data,Command Line,Floating Point,Binaryfiles,Raw Data,我有两个文件,它们是小端32位浮点值的原始序列(没有像无穷大、NaN、非规范值等疯狂的值),我想在第三个文件中产生它们的元素差异 现在,我可以用几乎所有的编译语言编写一个相对高效的小实用程序来实现这一点,但我想知道是否可以用一个使用常用工具的短脚本来更轻松地实现这一点。我的直觉是“不”,因为这是相当“非文本”的工作,但也许我错了。一个快速的perl脚本可以做到这一点(将两个文件作为命令行参数,写入标准输出): #/usr/bin/env perl 使用警告; 严格使用; 打开我的$file1,“

我有两个文件,它们是小端32位浮点值的原始序列(没有像无穷大、NaN、非规范值等疯狂的值),我想在第三个文件中产生它们的元素差异


现在,我可以用几乎所有的编译语言编写一个相对高效的小实用程序来实现这一点,但我想知道是否可以用一个使用常用工具的短脚本来更轻松地实现这一点。我的直觉是“不”,因为这是相当“非文本”的工作,但也许我错了。

一个快速的
perl
脚本可以做到这一点(将两个文件作为命令行参数,写入标准输出):

#/usr/bin/env perl
使用警告;
严格使用;

打开我的$file1,“由于POSIX外壳没有任何算法,更不用说浮点算法了,因此它并不完全适合该作业。如果可以将原始数据转换为浮点数的字符串表示形式,则可以使用诸如
bc
之类的工具进行算术运算。是浮点的二进制格式IEEE浮点32,你知道它们是以big-endian还是little-endian存储的吗?@user1934428:它们是little-endian。我想我可以用od和很多bc'ing来表示字符串,但那可能会非常慢。如果速度真的是个问题,为什么还要考虑使用非编译语言呢?如果您坚持只使用POSIX shell(而不是Ruby或Perl(正如Shawn在回答中所建议的)或类似的东西),我会将任务分为两个子问题:将二进制表示形式转换为字符串,然后在shell上下文中处理该字符串。如果速度很重要,最简单的方法可能是C程序。@user1934428:1。例如,我可能在一个没有安装编译器的系统上。另外,成为“一个问题”并不是一个真正的二元问题。或者我只是好奇。2.我没有说POSIX外壳只是…@user1934428:我说的是“通用工具”。我将移除标签。精确折衷的垃圾列表解救者:-)我能期望它足够快来处理“大小合适”的图像(比如,一百万个浮点数和更大的浮点数)吗?@einpoklum在我十年前的计算机上运行了不到一秒的一百万个浮点数,刚刚进行了一次快速测试。