我的文件在一个目录中,格式为
- 0163-301_02_29_2008_off.nii - 0163-301_02_29_2008_on.nii - 0164-303_11_30_2007_off.nii - 0164-303_11_30_2007_on.nii
我想运行一个涉及文件名称作为输入的命令。地址路径是
/Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/0163-301_02_29_2008_off.nii
等等。
到目前为止,我这是我编写的代码
for file in *_on.nii; do
set fileroot = ${file} cut -b 1-78
echo $fileroot
/usr/local/fsl414/bin/flirt -in $file -ref /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_off.nii -out /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff -omat /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff.mat -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 6 -interp trilinear
done
但是,$ fileroot集不会出现在指定的路径中,并且只输出一个空格。
答案 0 :(得分:0)
修复你的变量命名,对于初学者来说:
for files in *_on.nii; do
^^^^^- files with an S
set fileroot = ${file} cut -b 1-78
^^^^-- -file WITHOUT an S
答案 1 :(得分:0)
不要使用set
,因为它的目的是操纵shell选项/变量,而不是使用它:
fileroot="$(echo ${file} | cut -b 1-78)"
还要确保将大括号中fileroot
变量的引用括起来,即${fileroot}_ontooff
以分隔变量名称
答案 2 :(得分:0)
我并不完全按照您的意愿行事,但如果您想从0163-301_02_29_2008_on.nii
更改为0163-301_02_29_2008_off.nii
:
cd /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii
for on_file in *_on.nii; do
off_file=$PWD/${on_file/on.nii/off.nii}
# Do something with off_file
done
以上用“off.nii”替换“on.nii”
我更改了代码以包含每个请求的完整路径。