我有一个不断增长的文本文件。它最终会增长到超过 1GB 或更多。
我正在使用 Ubuntu 和一个 shell 脚本,将数据从多个小文本文件追加/分类到 1 个大文件,有时每秒写入多次。
目前,在将 113,500 个较小的文本文件中的数据写入其中时,它已经增长到超过 60MB,而且毫无问题。所有文本文件都与数据写入的文件位于同一目录中。
我关心的是如何在不降低性能的情况下提高性能并加快读/写过程。
这是我正在使用的 shell 脚本,它一次将它们批处理 500 个,并通过 cron 每 3 分钟运行一次。
想法?想法?更好的方法?
#!/bin/bash
c=0
d=500
for file in $(find . -maxdepth 1 -type f \( ! -name file1.txt -a ! -name file2.txt ! -name file3.txt \))
do
cat $file >> cat.txt
rm $file
c=$((c+1))
if [ $c -eq $d ]; then
break
fi
done
最佳答案
可能的改进:
只需一次完成所有文件:
find . -maxdepth 1 -type f \( ! -name file1.txt -a ! -name file2.txt ! -name file3.txt \) -exec cat {} >> cat.txt +
一次执行其中的 500 个只会增加一个您可能不关心的检查,并产生比必要的更多的
cat
进程。您需要单独删除文件,但您可以通过将-exec
部分更改为-delete
来简单地做到这一点。如果文件在处理过程中必须删除,因为可能会出现新文件,您可以简单地编写一个小脚本来代替上面命令中的cat
:cat "$@" rm "$@"
- 如果您使用硬盘作为存储介质,请将输出文件保存到与源文件不同的地方。这减少了搜索的需要。
关于linux - 使用 Ubuntu 每秒多次写入将数据附加到 1 GB 文件,没有性能问题。可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331950/