ディレクトリ内の各ファイルのペアに対してコマンドを実行し、結果をファイルに書き込み、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
現在のディレクトリで指定されたファイルにリダイレクトします。
奇妙なファイル名でテスト済みですが、安全であるようです。