Adicionando tags de formato trec a milhares de arquivos

0

Eu preciso adicionar tags como o texto do arquivo em milhares de arquivos em um diretório e eu tentei usando o cat e enviá-lo para um fluxo de arquivo usando

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

mas isso é muito lento. Alguém pode me dizer uma maneira melhor e mais eficiente de fazer isso? É possível fazer usando C? Como podemos abrir arquivos em lotes e, em seguida, processá-los e colocá-los de volta, pois isso pode acelerar esse processo, já que abrir e gravar arquivos é um gargalo, suponho.

Existe um programa premade (que é eficiente e rápido) para fazer este trabalho, pois estamos com pouco tempo.

    
por samue 15.03.2011 / 12:50

2 respostas

1

Você pode ver muitas melhorias chamando apenas cat uma vez por arquivo:

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

O traço nos argumentos de cat seleciona o nome do arquivo do pipeline. Todos os argumentos são CONCATENADOS juntos no arquivo de saída.

    
por 15.03.2011 / 14:54
0

Algumas otimizações para o seu método existente:

Algumas das operações cat podem ser substituídas por echo :

echo "</DOCID>" >> temp

Isso adicionará </DOCID> ao arquivo temporário sem precisar lê-lo primeiro. O mesmo pode ser feito para qualquer um dos gatos dos arquivos gau *, se o conteúdo não for muito longo.

Renomeie o arquivo temporário em vez de enviar os dados para o arquivo original:

mv temp $file

Esta é uma operação quase instantânea e não envolve ler todos os dados e, em seguida, escrevê-los novamente.

    
por 15.03.2011 / 13:10