0

C++ ソフトウェアの引数である一連のカップル値を渡す必要があります。だから私はこのスクリプトを書きました:

while read randomNumbers; do
                lambda = $randomNumbers | cut -f1 -d ' '
                mi = $randomNumbers | cut -f2 -d ' '
                ./queueSim mm1-queue $lambda $mi 
done < "randomNumbers"          

ここで、最初の引数はファイル「randomNumbers」の各行の最初の値であり、2 番目の値は (もちろん) 2 番目の値です。セグメンテーション違反と「コマンドが見つかりません」が発生しました。

行から取得した lambda と mi valus に割り当てて、この変数を c++ ソフトウェアに渡すにはどうすればよいですか?

4

2 に答える 2

4

カットの必要はありません。行を分割して読んでみましょう:

while read lambda mi; do
    ./queueSim mm1-queue $lambda $mi 
done < randomNumbers

入力行を異なるフィールドに分割するために、IFS と組み合わせて一般的に使用されることにも注意してください。たとえば、/etc/passwd(コロンで区切られた行を持つファイル) を解析するには、次のように表示されることがよくあります。

while IFS=: read username passwd uid gid info home shell; do ...
于 2013-01-30T17:10:44.223 に答える
1

次のように値を割り当てることをお勧めします。

lambda=$(echo $randomNumbers | cut -f1 -d ' ')
mi=$(echo $randomNumbers | cut -f2 -d ' ')

あなたがそれを行う方法は、実際には、の現在のコンテンツのような名前のコマンドを実行しようとします$randomNumbers.

編集: 別のこと:列は空白文字で区切られているため、要素が空白で区切られている配列に行全体を読み込むこともできます。これを実現する 1 つの方法は次のとおりです。

columns=( $(echo "$randomNumbers" | grep -o "[^ ]*") )
./queueSim mm1-queue ${columns[@]::2}

最初の行は、スペースを含まないすべての部分文字列に個別に一致し、それらを配列に入れますcolumns。2 行目は、実装の対応する行と同じことを行います: 最初の 2 つの列をパラメーターとして挿入します。はスライスで行われるため、配列全体を取得しますが、右側${columns[@]}の境界を適用してその特定のサブシーケンスを選択します。これは、左から始まるすべての要素 (位置) を返します。位置にはありません。::2columns0>=2

于 2013-01-30T17:08:50.983 に答える