2011-01-28 7 views
1

昨日私はコンソール出力をファイルに保存する方法を質問しました(redirect only last line of STDOUT to a file参照)。今度はファイルを繰り返し、コンパイルします。ここに私のコマンドです:昨日、ファイルの最後の行とファイル名をSTDOUTとパイプ経由で保存しました。

コンパイルの最後の出力とファイルの名前を保存します。上の例では、$ REPORTだけが保存されますが、反復変数の名前を参照したいと思います。例えば

私はファイルTest_Condition.scalaを持っていると、上記のコマンドを実行します。次に

for REPORT in Test_Basic_*.scala; do 
    scalac -Xplugin:divbyzero.jar $REPORT | awk 'END{print $REPORT} END{print}' >> output.txt; 
done 

scalac -Xplugin:divbyzero.jar $REPORTは、次のような出力を生成:

You have overwritten the standard meaning 
Literal:() 
rhs type: Int(1) 
Constant Type: Constant(1) 
We have a literal constant 
List(localhost.Low) 
Constant Type: Constant(1) 
Literal:1 
rhs type: Int(2) 
Constant Type: Constant(2) 
We have a literal constant 
List(localhost.High) 
Constant Type: Constant(2) 
Literal:2 
rhs type: Boolean(true) 
Constant Type: Constant(true) 
We have a literal constant 
List(localhost.High) 
Constant Type: Constant(true) 
Literal:true 
LEVEL: H 
LEVEL: H 
okay 
LEVEL: H 
okay 
false 
symboltable: Map(a -> 219 | Int | object TestIfConditionWithElseAccept2 | normalTermination | L, c -> 221 | Boolean | object TestIfConditionWithElseAccept2 | normalTermination | H, b -> 220 | Int | object TestIfConditionWithElseAccept2 | normalTermination | H) 
pc: Set(L, H) 

は今、私はTest_Condition.scala OUTPUT.TXTで保存したいです(ファイルの名前)とpc: Set(L, H)(コンパイル出力の最後の行です)。上記の私の命令で私は$REPORT pc: Set(L, H)を保存するだけです。

この説明が複雑な場合は、私に教えてください。あなたの素晴らしいサポートに感謝します。

マティアス

答えて

1

私が正しくあなたの質問を解釈する場合は、単にファイルの束でコマンドを実行し、ファイルの名前やコマンドの出力の最後の行の両方を格納するための方法をしたいです。これは動作するはずです:

 
: > output # clear out the output file 
for file in Test_Basic_*.scala; do 
    printf "$file: " >> output 
    scalac ... | awk 'END { print }' >> output 
done 
+0

私が欲しいものは何千ものありがとうウィリアムは私を救いました。私は 'printf'コマンドを学びました。 –

+0

リダイレクトを最後まで移動することができます。ファイルを最初にクリアする必要はありません: 'for ... done> output' –

2

あなただけあなたのawkスクリプトをREPORT変数のシェルの置換を防止し、単一引用符で囲まれているので、文字通りの「$ REPORT」を取得します。

これを試してみてください:

scalac ... "$REPORT" | awk -v filename="$REPORT" 'END {print filename; print}' >> output 

-vオプションは、シェルのREPORT変数の値を保持するためにfilenameという名前awkの変数を設定します。

また、シェル変数を常に引用するのは良い経験則です(特に除外する副作用が必要な場合を除きます)。

+0

もう一つのオプションは' ENVIRON' awk変数を使うことです。 '... | awk 'END {プリントENVIRON ["シェル"]; print} '' – jamessan

+0

@ jamessan、はい、変数を最初にエクスポートする必要があります。 –

関連する問題