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.py
deve ser substituído pelo nome completo do script.py
script.
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 cd
comando.
"${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 python
script 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 nomeado result.file
no diretório atual.
Foi testado com nomes de arquivos estranhos e parece seguro.