我很抱歉,如果这已得到回答,但由于我不肯定究竟是什么问题(在几种可能性中)我在搜索中没有成功。
我想要做的是将标签编号分别写入文本文件中的一行,使用包含该标签的文件进行操作,并将结果输出到文件中。我有这个:
cat good_PFC.txt | while read line;
do
base_file=${line}_blah.nii.gz
new_fa=${line}_fa_uncmasked.nii.gz
new_tr=${line}_tr_uncmasked.nii.gz
if [ -e $base_file ]; then
echo -n "$line " >> FA_unc_stats.txt
fslstats $new_fa -M | tr '\n' ' ' >> FA_unc_stats.txt
fslstats $new_fa -S | tr '\n' ' ' >> FA_unc_stats.txt
else
echo $line "not a file"
fi;
done
其中fslstats是输出数字的命令,good_PFC.txt是包含
的测试文件123
125
132
FA_unc_stats.txt中的输出是
123 0.221061 0.097268
出了什么问题,终端正确输出“125不是文件”,但对132没有任何作用,我知道恰好指向一个真实的文件。所以我认为我的while循环中的语法有问题,但我不知道是什么!我打赌这是愚蠢的,但我无法理解。谢谢!
ETA: 通过在good_PFC.txt的末尾添加换行符来修复现在问题是每当我到达新标签时我都需要在输出文件中写入换行符,但它不会这样做。我尝试添加
echo /n >> FA_unc_stats.txt
首先,但它在它自己的行上打印“/ n”...我在新行命令时失败了!
答案 0 :(得分:1)
你知道循环是否在最后一行运行吗?由于缺少换行终止符,Bash可能正在跳过最后一行。尝试在文件的最后一行添加换行符,看看是否能解决问题。
答案 1 :(得分:1)
只需添加'echo $ line',您就会看到读取循环是否按预期工作。
答案 2 :(得分:0)
使用
删除第一个管道while read line; do
...
done <good_PFC.txt
答案 3 :(得分:-1)
尝试将fslstsats命令放在后面的刻度中:
`fslstats $new_fa -M | tr '\n' ' ' >> FA_unc_stats.txt`
`fslstats $new_fa -S | tr '\n' ' ' >> FA_unc_stats.txt
`