ディレクトリ内の各ファイルのペアの結果をファイルに書き込む

ディレクトリ内の各ファイルのペアの結果をファイルに書き込む

ディレクトリ内の各ファイルのペアに対してコマンドを実行し、結果をファイルに書き込み、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}"これらの変数の値を安全に参照するために使用されます。

"$( ... )"内部のコマンドを実行し、二重引用符によって出力を 1 つの文字列にグループ化します。

printf "%s " "$( ... )"スクリプトの結果をpythonスペースを追加して出力します。

printf "\n"新しい行を印刷します。

> result.fileサブシェル内のすべてのコマンドで生成されたすべての出力を、result.file現在のディレクトリで指定されたファイルにリダイレクトします。

奇妙なファイル名でテスト済みですが、安全であるようです。

関連情報