0

2つのテキストファイルがあり、それぞれに数百行あります。一部の行は両方のファイルに存在しますが、一方のファイルにのみ存在するようにそれらを削除したいと思います。基本的に、私はそれらを減らして、ユニークな線のセットを取得したいと思います。キャッチは、私がそれらをソートできないことです(それらは私のChromium履歴の削除されたダンプです)。

これを行う最も簡単な方法は何ですか?

WinDiffを試しましたが、間違った結果になりました。しばらくするとPHPスクリプトをまとめることができると思いますが、もっと簡単な方法(できればコマンドラインツール)があることを望んでいます。

4

2 に答える 2

0

結局、PHPスクリプトを書くことになりました。

\r\n両方のファイルを文字列に読み込んでから、区切り文字として使用して文字列を配列に分解しました。次に、配列を繰り返して存在する要素をすべて削除し、最後にそれらをファイルにダンプして戻しました。

唯一の問題は、ストリッピングルーチンを関数にリファクタリングしようとすると、参照によって変更された(要素が削除された)配列を渡すと、Ctrl-Cが必要になるまで速度が低下することがわかりました。値を渡して、新しい配列を返しました(直感に反します)。また、要素の削除unsetに使用するのはどうしても遅いので、要素を空の文字列に設定し、ダンプ中にそれらをスキップしました。

于 2011-02-27T22:52:58.393 に答える
0

bashシェル(cygwin)がある場合、次のシェルコマンドは、両方のファイルに表示されるすべての行をa.txtから削除します。

comm -12 <(sort a.txt|uniq) <(sort b.txt|uniq) | while read dupe; do dupe_escaped=$(echo "$dupe" | sed 's/[][\.*^$/]/\\&/g'); sed -e "/${dupe_escaped}/d" -i a.txt; done
于 2011-02-27T23:17:32.213 に答える