我在工作中使用了一个名为AFNI的程序,我们都不是程序员,但是我们有足够的知识来获取。通常,当我们有大量文件要运行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 shell的蔑视,但是这个程序只能在终端的Unix / Linux / Mac机器上的tcsh中运行。
如果还有其他需要提供的内容,请告知我们。
答案 0 :(得分:1)
你走在正确的轨道上。
尝试添加/替换此
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
包围你的 foreach name (`nonesuch`)
nonesuch : Command not Found.
(在for循环中)。返回引号意味着"找到关闭后引用,然后获取随附的字符串并将其作为命令执行。如果你真的没有该目录中的文件,你应该看到像
cd
但是,如果您使用ls
和dos2unix ./myScript.sh
chmod 755 ./myScript.sh
#then you can run it
./myScript.sh
,您可以证明自己是在正确的目录中,然后应该对这些文件进行处理。
另外,如果您使用Windows编辑器创建此脚本,然后在Unix / Linux上执行,则需要
{{1}}
IHTH