c - 用于在二进制文件中随机改组字节 block 的 Unix 命令行工具?

标签 c unix command-line shuffle

是否有一种简单的方法可以随机混洗固定大小的字节 block ?

我有一个包含许多固定大小字节的大型二进制文件(例如,数百 GB)。我不关心随机性,但想随机播放二进制文件中的两个字节(或者可以是任何固定大小的字节,最多 8 个)元素。有没有办法结合 unix 核心工具来实现这个目标?如果没有这样的工具,我可能不得不开发一个 C 代码。我想听听人们有什么建议。

最佳答案

这是一个愚蠢的 shell 技巧。

  1. 首先,使用 xxd
  2. 将文件分解为两个 2 字节的 block
  3. shuf 随机播放它
  4. 使用 xxd 重新组合文件。

例如。

xxd -p -c 2 input_file | shuf - | xxd -p -r - output_file

我还没有在大文件上测试过它。您可能需要使用中间文件。

或者,您可以像这样使用 sort -R:

xxd -c 2 in_file |sort -R | cut -d' ' -f 2 | xxd -r -p - out_file

这取决于 xxd 输出偏移量,它应该对每一行进行不同的排序。

关于c - 用于在二进制文件中随机改组字节 block 的 Unix 命令行工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824909/

相关文章:

c - JM H.264引用编码器,复杂度计算

bash - 使用 env 在 bash 中为一个程序调用设置环境变量

c++ - C++段错误中的命令行参数

java - SwingWorker 和命令行进程中断

unix中的清除提示

linux - 无法在 Linux 命令行上执行 Praat 命令

c++ - 替代 C、C++?

c++ - 如何判断一个项目是c还是c++项目?

c - 读取 C 结构中的浮点值时出错

unix - 在 unix 中用另一个序列替换字符串模式