Записать результат для каждой пары файлов в каталоге в файл

Записать результат для каждой пары файлов в каталоге в файл

Я хотел бы выполнить команду для каждой пары файлов в каталоге и записать результат в файл, я хотел бы получить матрицу NxN результатов. Я начал:

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

К сожалению, я не знаю bash. Может кто-нибудь помочь мне его закончить? Спасибо заранее

решение1

Попробуйте это:

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

примечание: /path/to/script.pyнеобходимо заменить на полный путь к script.pyскрипту.

Весь блок заключен в (...). Все команды внутри выполняются в подоболочке. Это используется для группировки и захвата их вывода, а также для выполнения всех команд в some_directory, благодаря первой строке с cdкомандой.

"${file1}"и "${file2}"используются для безопасного обращения к значениям этих переменных.

"$( ... )"выполняет команду внутри и группирует вывод в одну строку благодаря двойным кавычкам.

printf "%s " "$( ... )"выводит результат выполнения pythonскрипта с дополнительным пробелом.

printf "\n"печатает новую строку.

> result.fileперенаправляет весь вывод, сгенерированный всеми командами внутри подоболочки, в указанный файл result.fileв текущем каталоге.

Он был протестирован со странными именами файлов и кажется безопасным.

Связанный контент