将一个循环的多个输出组合到一个文本文件中,在 Bash 中使用逗号

Combining multiple outputs from a loop into one text file with commas in Bash

我正在测试一种使用 bash 脚本的运动检测方法。我是 运行 ImageMagick 比较命令并将结果输出到文本文件中。

一个循环在每次运行时创建一个输出。我希望每个输出都放在一个文本文件中并用逗号分隔。

我目前使用的代码是:

for (( x=1; x<=$vidLength; x++))
do

#Compare current frame with previous, saving result as "difference-current"png
compare -metric RMSE -fuzz 5% previous-001.png current-001.png difference+%x+.png 2>> motionData.txt    

Done

此代码确实将所有数据放入一个文本文件中,但数据显示在一起,看起来就像一个大数字。

目前数据被放入文本文件中,但是显示如下: “4873343460936622743393154537”

当我想要它阅读时: “4873,343,4609,366,2274,339,315,4537”

你可以这样做:

for (( x=1; x<=vidLength; x++)) # no need for $ here
do
    #Compare current frame with previous, saving result as "difference-current"png
    compare -metric RMSE -fuzz 5% previous-001.png current-001.png difference+%x+.png 2>> motionData.txt
    if (( x<vidLength )) 
    then 
        printf , >> motionData.txt
    fi
done

printf 在循环中 compare 的每个输出之间添加一个逗号。该条件阻止在最后一次迭代中添加逗号。

略有不同:

for (( x=1; x<=$vidLength; x++))
 do
 #Compare current frame with previous, saving result as "difference-   current"png
 compare -metric RMSE -fuzz 5% previous-001.png current-001.png      difference+%x+.png   
   echo ","
 done > motionData.txt