0

我在一个目录中有格式为的文件

- 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 集没有出现在指定的路径中,它只输出一个空格。

4

3 回答 3

0

不要使用set,因为它的目的是操作 shell 选项/变量,而是使用这个:

fileroot="$(echo ${file} | cut -b 1-78)"

还要确保将fileroot变量的引用括在大括号中,即${fileroot}_ontooff分隔变量名

于 2013-07-31T18:17:27.040 回答
0

我不太符合您的要求,但是如果您想从更改0163-301_02_29_2008_on.nii0163-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

以上将“on.nii”替换为“off.nii”

更新

我更改了代码以包含每个请求的完整路径。

于 2013-07-31T18:18:13.797 回答
0

修正你的变量命名,对于初学者:

for files in *_on.nii; do
    ^^^^^- files with an S

set fileroot = ${file} cut -b 1-78
                 ^^^^-- -file WITHOUT an S
于 2013-07-31T18:10:12.600 回答