2011-10-01 25 views
2

これが解決されたのは残念ですが、私が肯定的ではないので、(いくつかの可能性の中で)何が問題なのですか?bashファイルの読み込み中whileループ

私がしたいことは、それぞれがテキストファイルの行として書かれたラベル番号をとり、そのラベルを含むファイルを使って結果をファイルに出力することです。 fslstats

cat good_PFC.txt | while read line; 
do 
base_file=${line}_blah.nii.gz 
new_fa=${line}_fa_uncmasked.nii.gz 
new_tr=${line}_tr_uncmasked.nii.gz 

if [ -e $base_file ]; then 

    echo -n "$line " >> FA_unc_stats.txt 
    fslstats $new_fa -M | tr '\n' ' ' >> FA_unc_stats.txt 
    fslstats $new_fa -S | tr '\n' ' ' >> FA_unc_stats.txt  

else 
    echo $line "not a file" 
fi; 
done 

れる番号を出力し、good_PFC.txtが

123 
125 
132 

FA_unc_stats.txtでの出力が

123 0.221061 0.097268 
あるを含むテストファイルであるコマンドです:私は何を持っていることはこれです

何が問題なのですか?ターミナルは「125 not a file」を正しく出力しますが、実際のファイルを指しているとわかっている132は何もしません。だから私はwhileループの文法に何か間違っていると信じていますが、私は何を知りません!私はそれが何かばかだと賭けるが、私はそれを理解できない。ありがとう!

ETA: 改行をgood_PFC.txtの最後に追加することで修正されました。問題は、新しいラベルを取得するたびに出力ファイルに改行が必要ですが、そうしないことです。私は追加しようとしました

echo /n >> FA_unc_stats.txt 

最初に、それは "/ n"をそれ自身の行に印刷します...私は改行コマンドで失敗します!

答えて

1

ループが最後の行で実行されているかどうか知っていますか?改行ターミネーターがないため、Bashは最後の行をスキップしている可能性があります。ファイルの最後の行に改行を追加し、問題が修正されているかどうか確認してください。バックにfslstsatsコマンドを入れ

+0

ああ、これはそれだったとの最初のパイプを削除します!私はファイルの最後に改行が必要だったのですが(あなたもそうでした)。今、私は上に改訂された出力を書く新しい問題があります。 –

+0

あなたの質問を修正して、今出力している出力を貼り付けることはできますか? – Anson

+0

申し訳ありませんが、私は質問を修正すると思ったよりも時間がかかりました。完了しました。 –

-1

試みはダニ:

`fslstats $new_fa -M | tr '\n' ' ' >> FA_unc_stats.txt` 
`fslstats $new_fa -S | tr '\n' ' ' >> FA_unc_stats.txt 

`

+0

-1:コマンドの結果を実行しようとします。結果が空である(リダイレクトのために)という事実は無関係です。 –

1

単に「$ラインをエコー」とあなたが期待するよう読み取りループが動作しているかどうかを確認します追加します。

0

while read line; do 
    ... 
done <good_PFC.txt 
関連する問題