2016-06-29 31 views
0

2つのテキストファイルを比較し、結果を新しいファイルに保存しようとしています。新しい行だけが表示され、ソート順は無視されます。私はちょうど新しいものが何かを見たいと思うし、ラインの変更はありません。これに到達するには、以下に示すバッチファイル内でいくつかの方法を試してみました。私は新しいものに両方のファイルを比較してみました。その後2つのファイル間の新しい行を新しいファイルにフィルタリングする

D:/filetype/sort.exe -b D:\filetype\listfile\listfile_clean_tmp3_1.txt -oD:\filetype\listfile\listfile_clean_tmp4.txt 

: 最初に私のような両方のファイルの順序を変更するuniqのと並べ替えを使用しています。 COMM

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

ひどいソリューションを通じて

1)は、正しく動作しません。注文に何か違うものがあると、それは多くの偽の結果を出します。例として、結果をアーカイブに保存して、それを再度比較すると、新しい行が表示されます。私は自分自身でアーカイブされたファイルを比較する場合.commとして

D:/filetype/diff.exe --new-line-format="" --unchanged-line-format="" d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

同じdiffを経由

2)は、それが新しい行が表示されます。

3)をGrep、SEDと差分

D:/filetype/diff.exe -U $(wc -l < (D:/filetype/listfile/listfile_clean_tmp4.txt) (D:/filetype/listfile/listfile_clean_tmp4.txt D:/filetype/listfile/archive/tmp/all.txt | D:/filetype/grep.exe '^-' | D:/filetype/sed.exe 's/^-//g' > D:\filetype\listfile\listfile_clean_tmp5.txt 

は、このWindowsのバッチで実行しているを取得することができませんでした、と把握することはできませんなぜ、エラーメッセージ「ファイルまたはフォルダ名の間違った構文」表示されます。どんなアイデアも素晴らしいだろう。 :

一部futher情報 - 私はWindowsの 内部のcoreutilsを使用しています - - の.pyスクリプト、バッチ、PHPとcorutils を使用することができ、私はアーカイブここ

に結果を追加するには、サンプルファイルでありますhttp://pastebin.com/raw/tNGSu2W6

最初に、私はそれを空のtxtファイル(all.txt)と比較します。最後のステップでは、それをall.txt(アーカイブ)にマージし、次の実行で正常にマージします。

copy /b D:\filetype\listfile\archive\*.txt D:\filetype\listfile\listfile_tmp_all.txt 
D:/filetype/uniq.exe D:\filetype\listfile\listfile_tmp_all.txt > D:/filetype/listfile/archive/tmp/tmp_all2.txt 
D:/filetype/sort.exe -b D:/filetype/listfile/archive/tmp/tmp_all2.txt -oD:/filetype/listfile/archive/tmp/all.txt 

これをすべて混乱させないように(これは少しスパルタです)。 1 http://pastebin.com/T68sqpET

更新diff.exe「< filename <filename> output」と一部のタイプミスがあった、pastbinコードを変更ウィンドウにエラーメッセージがトロウます。また、数字はdiffの欠点でもありませんでした。私は "uniq.exe -c"を使い、-cを削除する必要がありました。

+0

[編集]して2つのテストファイルを追加できますか? – DavidPostill

+0

完了:私はペーストビンが大丈夫だと思います。 – Deex

+0

最後のコマンドラインで不均衡な '()'カッコが見えます。さらに、 'diff.exe'にそれらを正しく供給するために、' cmd'の有毒な文字を[Escape](http://ss64.com/nt/syntax-esc.html)する必要があります:エスケープ '<' ''^< 'と' grep.exe'へ: '^^'と˙^˙をエスケープしてください。 – JosefZ

答えて

0

これで、なぜ通信が正しく動作しなかったのか分かりました。コマンド

D:/filetype/comm.exe --nocheck-order -2 -3 d:/filetype/listfile/listfile_clean_tmp4.txt d:/filetype/listfile/archive/tmp/all.txt > D:\filetype\listfile\listfile_clean_tmp5.txt 

--no-check-orderは必要ありませんが、それだけではありません。なぜそれが比較に失敗した主な理由は、私は私のツールチェーンでuniqまたは合併を使用し、それがテキストファイルの部分が編集された後、常に厳密にそれをソートしないということでした。 commと比較されるファイルは常に正しい順序でソートされることが非常に重要です。ここでのcoreutilsからLinuxの一種との一例である

D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce.txt -o D:\filetype\listfile\archive\tmp\bruteforce2.txt 
D:/filetype/core/uniq.exe D:\filetype\listfile\archive\tmp\bruteforce2.txt > D:\filetype\listfile\archive\tmp\bruteforce3.txt 
D:/filetype/core/sort.exe -b D:\filetype\listfile\archive\tmp\bruteforce3.txt -o D:\filetype\listfile\archive\tmp\bruteforce4.txt 

注意:あなたは(そうすることにひどく反応するUNIQ以外の)他の場所にコピーすることなく、同じファイルを並べ替える場合ソートは支障をしないだろう。私は個人的に一時ファイルを好みますが、ソートには必要ありません。

D:/filetype/core/sort.exe -b D:/filetype/listfile/listfile.txt -o D:/filetype/listfile/listfile.txt 

または単純な言葉で..「>それをソートし、それを変更して」あなたはそれを比較したい場合。

関連する問題