Мне нужно добавить теги, такие как текст файла в тысячи файлов в каталоге, и я попробовал это с помощью 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? Как мы можем открывать файлы в пакетном режиме, а затем обрабатывать их и возвращать обратно, поскольку это может ускорить этот процесс, поскольку я полагаю, что открытие и запись файла - это бутылочное горлышко.

Есть и готовая программа (которая эффективна и быстра) для выполнения этой работы, так как у нас мало времени.

2 ответа2

1

Вы можете увидеть много улучшений, вызывая cat только один раз для каждого файла:

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

Черта в аргументах cat выбирает имя файла из конвейера. Все аргументы объединяются в выходной файл.

0

Некоторые оптимизации вашего существующего метода:

Некоторые из операций cat могут быть заменены на echo:

echo "</DOCID>" >> temp

Это добавит </DOCID> к временному файлу без предварительного чтения его из файла. То же самое можно сделать для любой кошки из файлов gau *, если содержимое не слишком длинное.

Переименуйте временный файл вместо того, чтобы загружать данные в исходный файл:

mv temp $file

Это почти мгновенная операция, которая не предполагает считывания всех данных, а затем их повторной записи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .