使用 afni 程序在 tcsh 中进行 foreach 循环

foreach loop in tcsh using afni program

我在工作中使用一个名为 AFNI 的程序,我们 none 都是程序员,但我们有足够的知识来应付更多的情况。通常,当我们有很多文件想要 运行 AFNI 时,我们必须复制并粘贴命令并在记事本中编辑文件名,然后再将其复制到终端,这可能会导致一些错误。我们正试图通过使用 shell 脚本来简化这一过程。

我正在尝试 运行 对其中包含 .nii 文件的文件夹进行 foreach 循环,我希望将这些文件名附加到以“3dclustsim”开头的行的末尾。我希望将文件名放在 $name 所在的位置,以便在该文件上执行命令。

到目前为止,我有:

#!/bin/tcsh

clear
set path = ($path /home/lab/abin)
afni


foreach name (`*.nii`)
    3dclustsim -fwhmxyz 16 16 16 -pthr 0.05 0.01 0.005 0.001 -athr 0.05 -nodec -iter 10000 -OKsmallmask -mask /home/lab/Desktop/Masks/$name
end

我没有对上面的任何迭代或我在网上找到的任何修改感到幸运。我知道很多人对 C shells 不屑一顾,但这个程序只会 运行 在终端 Unix/Linux/Mac 机器上的 tcsh 中 运行。

如果还有什么需要我提供的,请告诉我。

你走在正确的轨道上。

尝试adding/replacing这个

cd /path/to/dir/with/nii_files
/bin/ls -l *.nii

foreach name ( * ) 
     3dclustsim -fwhmxyz 16 16 16 -pthr 0.05 0.01 0.005 0.001 -athr 0.05 -nodec -iter 10000 -OKsmallmask -mask /home/lab/Desktop/Masks/$name
end

您的 afni 程序可能正在读取一个配置文件,该文件告诉它把文件放在哪里。您必须 cd 到正确的目录才能处理它们。

您可能做对了,但是您收到一条错误消息 *.nii : No Match 告诉您您要处理的文件不存在。

然而,您的问题中令人困惑的部分是您用反引号将 *.nii 括起来(在 for 循环中)。反引号的意思是“找到结束反引号,然后获取封闭的字符串并将其作为命令执行。如果该目录中确实没有文件,您应该会看到类似

的内容
 foreach name (`nonesuch`)
 nonesuch : Command not Found.

但是,也就是说,如果您使用 cdls,您可以向自己证明您在正确的目录中,然后应该处理文件。

此外,如果您使用 windows 编辑器创建此脚本,然后在 Unix/Linux 上执行,则需要

dos2unix ./myScript.sh
chmod 755 ./myScript.sh
#then you can run it
./myScript.sh

IHTH