Escriba el resultado para cada par de archivos en el directorio al archivo

Escriba el resultado para cada par de archivos en el directorio al archivo

Me gustaría ejecutar un comando en cada par de archivos en el directorio y escribir un resultado en un archivo. Me gustaría obtener una matriz NxN de resultados. He empezado:

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

Desafortunadamente, no conozco bash. ¿Alguien podría ayudarme a terminarlo? gracias de antemano

Respuesta1

Prueba esto:

#!/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

nota: /path/to/script.pydebe reemplazarse con la ruta completa del script.pyscript.

Todo el bloque está encerrado en (...). Todos los comandos internos se ejecutan en una subcapa. Esto se utiliza para agrupar y capturar su salida y para hacer que todos los comandos se ejecuten en el archivo some_directory, gracias a la primera línea con cdcomando.

"${file1}"y "${file2}"se utilizan para referenciar los valores de estas variables de forma segura.

"$( ... )"está ejecutando el comando interno y agrupa la salida en una sola cadena gracias a las comillas dobles.

printf "%s " "$( ... )"imprime el resultado del pythonscript con un espacio adicional.

printf "\n"imprime una nueva línea.

> result.fileredirige toda la salida generada con todos los comandos dentro del subshell al archivo nombrado result.fileen el directorio actual.

Se ha probado con nombres de archivos extraños y parece seguro.

información relacionada