在 Bash 中写入文件

在 Bash 中写入文件

我是 Bash 脚本的新手,我正在尝试输出 2 列数据。第一列有# vs # :第二列有相关系数。我尝试将1 vs 2 : 0.214213,末尾带有逗号的数据输出到文件,但它输出的结果是1 vs 2 : ,0.214213中间带有逗号。这是我正在使用的 Bash 命令行:

echo -e -n "$i vs $((i+1)) :\t" >> ./EEG_DATA/conc_corr_$conc.csv | corr ./EEG_DATA/ERP/ERP$conc/ERP$conc.$i.txt ./EEG_DATA/ERP/ERP$conc/ERP$conc.$((i+=1)).txt >> ./EEG_DATA/conc_corr_$conc.csv | echo -n ',' >>./EEG_DATA/conc_corr_$conc.csv

我不确定为什么逗号写在中间,而echo逗号的命令位于行尾。任何帮助都将不胜感激。

答案1

由于文件名太长,难以理解发生了什么,请允许我创建一个简化版本的命令:

echo -e -n "$i vs $((i+1)) :\t" >> correlation.csv | 
corr conc.$i.txt conc.$((i+=1)).txt >> correlation.csv | 
echo -n ',' >>correlation.csv

您不能同时使用 将输出写入文件,>>同时使用 将其传输到另一个命令。如果您想将输出同时写入文件和管道,您可以使用该命令,但我几乎可以肯定这不是您的目标。|tee

我相信你只是想依次运行这三个命令,,,echocorr另一个echo没有将它们的输出连接到下一个命令的输入(这是管道的目的|)。

我的回答与@cnd 的类似,但我会替换全部用分号|代替符号,或者简单地将每个命令写在自己的行上:

echo -e -n "$i vs $((i+1)) :\t" >> correlation.csv 
corr conc.$i.txt conc.$((i+=1)).txt >> correlation.csv
echo -n ',' >>correlation.csv

为什么你原来的做法不起作用:通过管道传输的命令并行运行。您可以通过以下测试清楚地看到这一点:

sleep 1234 | sleep 5678 | sleep 9012 &
ps -f

您将看到所有三个sleeps 都处于休眠状态。在您的例子中,两个echo命令 和corr也是并行启动的,但echos 的输出速度比 快corr,这解释了为什么在相关值前面写有逗号。

答案2

您是否混淆了竖线和分号?例如,将最后的 | 改为 ; ,将 , 放在最后。

相关内容