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

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

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, não sei bash. Alguém poderia me ajudar a terminar? Agradeço antecipadamente

Responder1

Experimente 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

observação: /path/to/script.pydeve ser substituído pelo nome completo do script.pyscript.

Todo o bloco está incluído (...). Todos os comandos internos são executados em um subshell. Isto é usado para agrupar e capturar sua saída e fazer com que todos os comandos sejam executados no some_directory, graças à primeira linha com cdcomando.

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

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

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

printf "\n"imprime uma nova linha.

> result.fileredireciona toda a saída gerada com todos os comandos dentro do subshell para o arquivo nomeado result.fileno diretório atual.

Foi testado com nomes de arquivos estranhos e parece seguro.

informação relacionada