我需要在目录中的数千个文件中添加类似文件文本的标签,我尝试使用 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
这是一个几乎即时的操作,不需要读取所有数据然后重新写入。