我試圖通過各種線程在線排序,並且無法確定如何將輸出管道輸送到後續命令。我正在使用批處理腳本(通過bash)通過獨立程序連接多個文件,這需要輸入爲特定格式。
在程序中級聯的標準命令是:
fslmerge -t $OUTPUT $INPUT1 $INPUT2... $INPUT n
我已經嘗試了幾種方法來定義輸入文件,與下面的最近一次嘗試。
file=$INPUTDIR/sublist.txt
while read -r SUBJ; do
for cond in "med" "nomed"; do
for n in {01..10}; do
INPUT="stage2_${SUBJ}_${cond}_00${n}.nii.gz"
fslmerge -t $OUTPUT/stage2_ic00${n}_${cond}.nii.gz `ls $INPUTDIR/$INPUT`
done; done; done < $file
然而,這導致在運行上的每個輸入的命令分別對所有輸入上運行命令(如上面在「標準命令」指出):
fslmerge -t $OUTPUT $INPUTDIR/subject1
fslmerge -t $OUTPUT $INPUTDIR/subject2
...
fslmerge -t $OUTPUT $INPUTDIR/subject10
編輯: 的sublist.txt列出如下。它們按順序堆疊,我需要它們通過fslmerge
連接起來。
SUB003
SUB006
SUB007
SUB010
SUB011
SUB001
SUB004
SUB008
SUB009
對於每個條件(med,no med),每個主題都有多個組件(n)。最終,我需要運行該命令,以便連接給定條件和組件的所有主題。一個例子是:
fslmerge -t $OUTDIR/stage2_ic0001_med.nii.gz stage2_SUB003_med_0001.nii.gz stage2_SUB006_med_0001.nii.gz stage2_SUB007_med_0001.nii.gz ... stage2_SUB009_med_0001.nii.gz
我會非常感謝任何輸入的問題和/或簡化方法!我在編碼方面比較新,對任何術語錯誤都表示真誠的歉意。我意識到我的嘗試可能嚴重脫離這個世界。
你能澄清你想要它做什麼嗎?特別是,它應該在sublist.txt中爲每一行運行'fslmerge',或者每行運行兩次(一次使用cond =「med」,一次使用cond =「nomed」),或者二十次(每次組合一次cond和n)?如果是最後一個,那麼輸入文件是什麼(你似乎只顯示每個SUBJ/cond/n組合的一個輸入);如果它不是最後一個,輸出文件應該是什麼(你似乎顯示cond,而n是文件名的一部分)。 –
一般的想法是將所有輸入文件名添加到數組中,然後使用'「$ {array [@]}」'把它們全部放在命令的末尾。但我也不明白你想怎麼做,因爲你的輸出文件對於每個輸入文件都是不同的。 – Barmar
嗨戈登,非常感謝您的幫助!你的問題非常好,我認爲這是我搞亂的地方,並且一直對如何進行感到困惑。這是你給出的最後一個例子:每個主題(SUBJ)有兩個條件(med,no med)。對於每個條件,每個主題都有多個組件文件(n)。 – edub