2017-01-13 14 views
-1

この状況を処理するには、より良い方法を見つける必要があります。これは私がやっていることで、何をしたいのですか:、文字列の検索ファイル、文字列がない場合はファイルを追加

私は一日中ループするプログラムからデータを取ります。新しいデータをすべて追加して、ファイル(file1)を追加します。 ループ内のプログラムは、1日以上の回数のリピートデータを送信します。私は既に自分のfile1に存在しない行だけを追加したいと思う。 file1のデータを書き込むのではなく、awkを使って重複を取り除き、file2に書き込んだり、file1を削除したり、file2をfiles1のパスにコピーしたり、file2を削除したりする方法があるかどうかを知りたい存在する1つのファイル全体の時間?私はSDメモリを使用していると私は私のSDカードの生活を通して燃えているだろう数日後のように感じる。私は、RAMや、ファイルのテキストを読み込んで編集し、それを元に戻すことができる他のコマンドを利用する必要があります。 これはtehの仕事を取得するコードですが、私はそれが私のSDカードには非常に難しいと感じ:私も$のdatafromprogramが既に存在する場合はファイルfile1をチェックするために、いくつかのロジックを使用してみましたが

echo $datafromprogram >> file1 
awk '!seen[$0]++' file1 >> file2 
rm file1 
cp file2 file1 
rm file2 

が、いくつかのためにこれは私がサンプルコードを実行するときに動作する理由ですが、echo not foundecho $datafromprogram >> file1に置き換えると、コードを実行するたびに、文字列が完全に一致しても常に "else"を使用して終了します。

サンプルコード:

if grep -q PATTERN file.txt; then 
    echo found 
else 
    echo not found 
fi 

マイコード:

if grep -Fxq $datafromprogram file1; then 
echo "String already exists" 
else 
echo $datafromprogram >> file1 
fi 
+0

あなたの変数を二重引用符で囲むことで、シェルによる単語分割を避けることができます。つまり、「$ datafromprogram」となります。 – Inian

+0

ありがとう、ありがたくありがとうございます。私はあなたが私の質問を読んだとは思わない。私は単語分割問題を持っていません。私は2つのファイルの使用を避けようとしています。 idは新しいファイルを保存せずに1つのテキストファイルの変更を自動化し、元のファイルを削除し、他のファイルの名前を元のファイルの名前に変更するのが好きです。質問をもう一度お読みになり、質問されていないことに答える前に何が尋ねられているかを確認してください。 – HoustoneD

答えて

0

私は最高の私の要件に合うように、この解決策を見つけました。

grep -E "$datafromprogram" file1 || echo "$datafromprogram" >> file1 

これは、ファイル1の文字列をチェックするためにgrepを使用して行われます。二重配管は、真または偽のいずれかを返す。 falseを返すと、file1に文字列が追加されます。

申し訳ありませんが、私はこのアイデアがどこにあるかを忘れていました。後で私の歴史の中でリンクを見つけることができれば、私はこの答えに追加します。

関連する問題