2017-11-13 14 views
0

私は、テキストファイル(端末経由で入力)から特定の値を抽出するシェルスクリプトを持っています。スクリプトは、出力をファイルに正しく出力しないことを除いて、意図したとおりに抽出を行います。シェル出力ファイルへの書き込みスクリプト

スクリプトは次のとおりです。

#!/bin/bash 

input_file=$1 
while read -r LINE 
do 
IFS="=" read -r -a params <<< "$LINE" 
if [ -n "${params[2]}" ] 
    then 
    IFS=" " read -r -a param_opcode <<< "${params[2]}" 
    echo "${param_opcode}" 
fi 
done < "$input_file" 

次のように端末の出力は次のようになります。

しかし
0xd2800140 
0xd2800061 
0x8b010000 
0x8b000042 
0xd1000821 
0xd28001e5 
0xd28000a6 
0x9ac608a5 
0xe7ff0010 
0xe7ff0010 

、私がやっ府テキストファイルにこれを書いしようとすると:

echo "${param_opcodes}" > log.txt 

これはファイルにのみこれを印刷します:

0xe7ff0010 

私は試しましたが、私は追加したくありません。毎回ファイルを上書きしたい、私はスクリプトを実行する。

答えて

1

ログファイルへのリダイレクトは、whileループ内にあるため正しくありません。 whileループの最後にリダイレクトを使用します。

while read -r LINE; do 
... 
done < "$input_file" > "log.txt" 
+0

ありがとうございます。しかし、なぜ私が試みるのが失敗するのか不思議です。 –

+0

@the_black_mamba、... '>は' O_TRUNC'でファイルを開き、以前の内容をゼロにするためです。 –

+0

@Charlesはあなたが手がけてくれました –

関連する問題