linux - 使用 Ubuntu 每秒多次写入将数据附加到 1 GB 文件,没有性能问题。可能的?

标签 linux bash shell ubuntu cat

我有一个不断增长的文本文件。它最终会增长到超过 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/

相关文章:

linux - 逐行查找差异

java - 为什么我的 java 代码在没有 GUI 的情况下只使用了大约 20% 的 CPU

regex - 如何在 linux/unix 中删除文件中特定行中间的逗号

linux - 在 sed 命令中使用 "{}"和 "\;"

linux - gz 文件的递归 grep 从输出字符串中搜索字符串

php - 如何使用 PHP + shell 命令优化视频到动画 GIF 的转换

linux - 使用字符串输入查找文件名的 Shell 脚本

linux - 我在 unix 中 at 作业的输出中不断收到 'while syntax' 错误,我不知道为什么

linux - 在不知道 AWK 中确切位置的情况下替换缺失值

linux - 错误: bad instruction 'rfe lr' arm cross compiler