将目录中每对文件的结果写入文件

将目录中每对文件的结果写入文件

我想对目录中的每一对文件执行命令并将结果写入文件,我想获得 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当前目录中命名的文件中。

它已经用奇怪的文件名进行了测试并且看起来很安全。

相关内容