我想对目录中的每一对文件执行命令并将结果写入文件,我想获得 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
,这要归功于第一行带有cd
命令。
"${file1}"
并"${file2}"
用于安全地引用这些变量的值。
"$( ... )"
正在执行里面的命令,并通过双引号将输出分组为单个字符串。
printf "%s " "$( ... )"
打印脚本结果python
时附加一个空格。
printf "\n"
打印新行。
> result.file
将子 shell 内的所有命令生成的所有输出重定向到result.file
当前目录中命名的文件中。
它已经用奇怪的文件名进行了测试并且看起来很安全。