2016-06-24 33 views
1

"test_file1"というファイルがあります。私はこのファイルの各行を読み、それを "test_file2"という別のファイルに書きたいと思います。これらのファイルは両方とも同じディレクトリにあります。行ごとに読み込み、別のファイルシェルスクリプトで書き込む

私は

#!/bin/sh 
# My first Script 
echo "Hello World!" 
file=$(<test_file1.txt) 
echo "Test" >> test_file2.txt 
while IFS= read -r line;do 
    echo -e "legendary" >> test_file2.txt 
    echo "$line" >> test_file2.txt 
done <"$file" 
echo "completed" 

を試みたスクリプトがtest_file2.txtに「テスト」を書き込みますがtest_file2に「伝説的」またはtest_file1の行を書き込みません。

助けてもらえますか?

ありがとうございます。

答えて

1

ファイルを最初に読み込む代わりに直接使用してください。その変更あなたの
done <"$file"からdone < "test_file1.txt"

#!/bin/sh 
# My first Script 
echo "Hello World!" 
echo "Test" >> test_file2.txt 
while IFS= read -r line;do 
    echo -e "legendary" >> test_file2.txt 
    echo "$line" >> test_file2.txt 
done < "test_file1.txt" 
echo "completed" 
+0

こんにちはDAXaholicに行うために、 ありがとうございました。今すぐうまくいく!! –

+0

ループ内のファイルを繰り返し開いたり閉じたりするよりも、 'done'の後に単一のリダイレクトを行う方がはるかに効率的です。これをsrmpleのAwkスクリプトで置き換えることは、より良い方法です。このような行を読み書きするシェル・ループはしばしば反パターンです。 – tripleee

+0

もちろん、awkスクリプトを書く方が効率的です.Cでネイティブアプリケーションを書く方が効率的です。 このスクリプトが何千もの行を処理する場合、私は同意し、おそらくリファクタリングする必要があります。この場合、私はちょうどそのような厳しいperf制約がないということを前提にしているので、質問者に完全な新しいコードスニペットを与えるのではなく、自分のコードの失敗した部分を表示する方が良いでしょう。違う言語)を理解するのは難しいかもしれません。それにもかかわらず、追加のノートのためのthx! – DAXaholic

関連する問題