2012-03-01 7 views
9

私の問題を解決するbashスクリプトまたはいくつかのシェルコマンドを書きたいと思います。 old.txtとnew.txtという2つのファイルがあります。私はdiff.txtというファイルを生成したいと思います。このファイルには、変更された行や新しい行だけがあります。たとえば、私が持っていた場合:2つのファイルをdiffして新しい行または変更した行だけを残す

old.txt:

Sierra 
Tango 
Oscar 
Victor 
Whiskey 
Yankee 

new.txt:

Echo 
Osc__ar 
Uniform 
Yan__kee 
:私はこのようになりますdiff.txtを望む

Sierra 
Tango 
Echo 
Osc__ar 
Victor 
Uniform 
Whiskey 
Yan__kee 

私はこのスクリプトを書いて、シリアルポート経由でエンブにプログラムをロードするための差分Motorolla S2レコードを作成するのを手伝っていますddedコンピュータ。私はかなりうまくバッシュを知っています、私はちょうどどこから始めなければならないのか分かりません。どのようにだけ新しい行とdiffを使用して行を変更ここで

答えて

8
$ awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
16
$ grep -v -f old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
+0

恐ろしい、これは動作しますが、どちらかのファイルが空の行を持っている場合、出力は空です。また、完全なファイルについては、 "grep:無効なバックリファレンス"が得られます。 – portforwardpodcast

+1

@portforwardpodcast古いファイルで正規表現と解釈されるものはありますか? – chrisaycock

+0

ええ、私はまったく行います。たくさんのスラッシュと開始点と点など私はawkが私のために行く方法だと思います:) – portforwardpodcast

0

は次のとおりです。

$ cat file.txt file2.txt 
line 1 
line 2 
line 3 
line 4 
line 5 
line 5 
$ cat file2.txt 
line 1 
line 2 
line 3 
line 4b 
line 5 
line 6 

$ diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' file.txt file2.txt 
***line 4b 
+++line 6 
関連する問題