java - 拆分文件 - Java/Linux

标签 java linux

我有一个包含近 2.5 亿个字符的大文件。现在,我想把它分成几个部分,每个部分包含 3000 万个字符(所以前 8 个部分将包含 3000 万个字符,最后一个部分将包含 1000 万个字符)。另一点是,我想在下一部分的开头包含每个文件的最后 1000 个字符(意味着第 1 部分的最后 1000 个字符附加在第 2 部分的开头 - 因此,第 2 部分包含 3000 万个 1000 个字符,依此类推)。任何人都可以帮助我如何以编程方式(使用 Java)或使用 Linux 命令(以快速方式)进行操作。

最佳答案

一种方法是使用常规的 unix 命令拆分文件,并在前面加上前一个文件的最后 1000 个字节。

首先拆分文件:

split -b 30000000 inputfile part.

然后,对于每个部分(忽略最远的部分,从前一个的最后 1000 个字节开始创建一个新文件:

unset prev
for i in part.*
do if [ -n "${prev}" ]
  then 
    tail -c 1000 ${prev} > part.temp
    cat ${i} >> part.temp
    mv part.temp ${i}
  fi
  prev=${i}
done

在组装之前,我们再次遍历文件,忽略第一个并丢弃前 1000 个字节:

unset prev
for i in part.*
do if [ -n "${prev}" ]
  then 
    tail -c +1001 ${i} > part.temp
    mv part.temp ${i}
  fi
  prev=${i}
done

最后一步是重新组合文件:

cat part.* >> newfile

由于没有解释为什么需要重叠,我只是创建它然后将其丢弃。

关于java - 拆分文件 - Java/Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180078/

相关文章:

linux - 硬件地址如何映射到 Linux(Ubuntu) 机器上的 eth0/eth1。?

java - 命令是否从 shell 脚本中的当前目录运行?

java - 缺少 Artifact com.oracle :ojdbc14:jar:10. 2.0.1.0

java - 为什么 JavaFX Application.launch() 将类作为参数?

c - Makefile .o 文件规则问题

java - 将 TCP 端口流量重定向到其他端口,以便 Java 应用程序知道使用了哪个端口

linux - Debian 7 Lamp 上的 Webmin

java - 避免与 Kotlin 泛型内联

java - 套接字的连接和读取超时有什么区别?

java - 如何在我的自定义日期和时间中设置通知