0

1つのディレクトリに次の形式のファイルがあります

- 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

まず、変数の命名を修正します。

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 に答える
0

を使用しないでくださいset。目的はシェル オプション/変数を操作することなので、代わりにこれを使用します。

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

また、変数への参照を必ずfileroot中括弧で囲んでください。つまり${fileroot}_ontooff、変数名を区切ります。

于 2013-07-31T18:17:27.040 に答える
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

上記は「on.nii」を「off.nii」に置き換えます

アップデート

リクエストごとにフルパスを含めるようにコードを変更しました。

于 2013-07-31T18:18:13.797 に答える