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.py
debe reemplazarse con la ruta completa del script.py
script.
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 cd
comando.
"${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 python
script con un espacio adicional.
printf "\n"
imprime una nueva línea.
> result.file
redirige toda la salida generada con todos los comandos dentro del subshell al archivo nombrado result.file
en el directorio actual.
Se ha probado con nombres de archivos extraños y parece seguro.