Grave o resultado para cada par de arquivos no diretório para o arquivo

0

Eu gostaria de executar o comando em cada par de arquivos no diretório e gravar um resultado em um arquivo, gostaria de obter a matriz NxN de resultados. Eu comecei:

for file1 in some_directory/*.txt; 
do 
    filename1=$(basename "$file1")
    for file2 in some_directory/*.txt; 
    do 
        //here python script should be run 
        python script.py file1 file2
        //and result should be written to file, seperate by space
    done
    //here should be new line
done

Infelizmente, eu não sei bash. Alguém poderia me ajudar a terminar isso? Obrigado antecipadamente

    
por adolzi 18.05.2016 / 19:31

1 resposta

0

Faça uma tentativa para isso:

#!/bin/bash --
(cd some_directory ;\
 for file1 in *.txt ; do
   for file2 in *.txt ; do
#    here python script should be run
     printf "%s " "$(python /path/to/script.py "${file1}" "${file2}")"
   done
   printf "\n"
 done ) > result.file

note : /path/to/script.py deve ser substituído pelo nome completo do caminho do script script.py .

O bloco inteiro está incluso em (...) . Todos os comandos dentro são executados em uma subcamada. Isso é usado para agrupar e capturar sua saída e para executar todos os comandos no some_directory , graças à primeira linha com o comando cd .

"${file1}" e "${file2}" são usados para referenciar os valores dessas variáveis com segurança.

"$( ... )" está executando o comando dentro e agrupa a saída em uma única string, graças às aspas duplas.

printf "%s " "$( ... )" imprime o resultado do script python com um espaço adicional.

printf "\n" imprime uma nova linha.

> result.file redireciona toda a saída gerada com todos os comandos dentro do subshell para o arquivo chamado result.file no diretório atual.

Ele foi testado com nomes de arquivos estranhos e parece seguro.

    
por Jay jargot 18.05.2016 / 20:22