我想對目錄中的每對文件執行命令並將結果寫入文件,我想獲得結果的矩陣 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
腳本的完整路徑名。
整個區塊包含在 中(...)
。裡面的所有指令都在子 shell 中執行。這用於分組和捕獲它們的輸出,並使所有命令在 中執行some_directory
,這要歸功於第一行 withcd
命令。
"${file1}"
並"${file2}"
用於安全地引用這些變數的值。
"$( ... )"
正在執行內部命令,並透過雙引號將輸出分組到單一字串中。
printf "%s " "$( ... )"
列印腳本的結果python
並新增一個空格。
printf "\n"
列印一個新行。
> result.file
將子 shell 內所有指令產生的所有輸出重新導向到result.file
目前目錄中指定的檔案。
它已經用奇怪的文件名進行了測試,看起來很安全。