1

このフォーラムや他のフォーラムで答えを見つけようとしました。以下は、for ループ内で一連のコマンドを実行することになっている bash スクリプトです。ファイルから 2 列を読み込んでいます。最初の列にはファイル名 (FARR) のリストがあり、2 番目の列にはパラメーター (処理で使用される番号 (NARR)) があります。FARR のすべてのファイルに対して一連のコマンドを実行し、「do」の後に始まるコマンドでファイル名とパラメーターを使用します。${NARR[$N]} がパラメーターを行末に追加しないことを除いて、すべてが正常に機能します。この段階ではパラメータは空白です。echo $NARR を使用すると、完全なリストが表示されます。したがって、データはそこにあります...どんな助けも大歓迎です。

#!/bin/bash

DIR='gauss_data/'
declare -i N=0
FARR=$(cat $DIR'all.dat' | awk '{if (NR!=1) print $1}')
NARR=$(cat $DIR'all.dat' | awk '{if (NR!=1) print $2}')
for f in $FARR;
do
    ./gauss_and_noise.py -i $DIR$f -o $DIR$f'.out' -d --save $DIR$f'.out.plot.png' --n0 ${NARR[$N]}
    let "N++"
done
4

3 に答える 3

3

あなたNARRは配列だと言いますが、文字列値を与えています

ひょっとしたらこれに変わるかも

NARR=($(awk 'NR>1 {print $2}' "$DIR"all.dat))
于 2013-02-24T00:22:14.620 に答える
1

さらに、配列を反復処理するには、次の構文を使用します。

for f in "${FARR[@]}"
于 2013-02-24T00:35:55.317 に答える
0

whileループとreadコマンドを使用することで、これを大幅に簡単に行うことができます。readbeforeループは、入力ファイルの最初の行を使用せずに消費するためにあります。配列は必要ありません。読むときに各入力行を使用するだけです。

dir='gauss_data'
declare -i N=0
{
    read
    while read f n rest; do
        ./gauss_and_noise.py -i "$dir/$f.out" -d \
                             --save "$dir/$f.out.plog.png" --n0 $n
        ((n++))
    done
} < $dir/all.dat
于 2013-02-24T02:16:26.437 に答える