我是 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
我相信你只是想依次运行这三个命令,,,echo
和corr
另一个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
您将看到所有三个sleep
s 都处于休眠状态。在您的例子中,两个echo
命令 和corr
也是并行启动的,但echo
s 的输出速度比 快corr
,这解释了为什么在相关值前面写有逗号。
答案2
您是否混淆了竖线和分号?例如,将最后的 | 改为 ; ,将 , 放在最后。