为数千个文件添加 trec 格式标签

为数千个文件添加 trec 格式标签

我需要在目录中的数千个文件中添加类似文件文本的标签,我尝试使用 cat 并将其输出到文件流中

for file in *
do
    cat ../gau > temp;  //gau contain format i need to append in each file
    echo $file >>temp;
    cat ../gau_ >>temp ;//contains </DOCID>
    cat $file >>temp;  
    cat ../gau1  >> temp;  //this contain last sentence </DOC>
    cat temp > $file
done

但这样做很慢。有人能告诉我一个更好更有效的方法来做到这一点吗?可以使用 C 来实现吗?我们如何批量打开文件,然后处理它们并放回,因为它可以加快这个过程,因为我认为打开和写入文件是一个瓶颈。

由于我们的时间紧迫,是否有预制的程序(高效、快速)来完成这项工作。

答案1

cat每个文件仅调用一次,您可能会看到很大的改进:

for file in *
do
    echo "$file" | cat ../gau - ../gau_ "$file" ../gau1 > temp && mv "$file"
done

参数中的破折号cat从管道中获取文件名。所有参数都连接在一起进入输出文件。

答案2

对现有方法进行一些优化:

某些cat操作可以替换为echo

echo "</DOCID>" >> temp

这将附加</DOCID>到临时文件,而无需先从文件中读取它。如果内容不太长,可以对 gau* 文件中的任何 cat 执行相同的操作。

重命名临时文件而不是将数据复制到原始文件中:

mv temp $file

这是一个几乎即时的操作,不需要读取所有数据然后重新写入。

相关内容