-1

file1.txt と file2.txt の 2 つの txt ファイルを取得しました。両方とも、各行に 1 つの文字列があります。file1.txt の文字列は一意 (重複なし) であり、file2.txt の文字列も同様です。ファイルには異なる数の文字列があります。

file1.txt                 file2.txt

FFF                       AAA
GGG                       BBB 
ZZZ                       CCC
                          ZZZ

これらのファイルを比較したいので、file1.txt のすべての文字列について、file2.txt に存在する場合は問題ありません。そうでない場合は、その文字列を別のファイル (file3.txt) に書き込みます。

この例では、file3.txt は次のようになります。

file3.txt

FFF
GGG

次のようなコマンド シェルを使用したいと思います。

cat file1.txt | while read a; do something on file2.txt ...

しかし、それは義務ではありません。

4

2 に答える 2

1

See the man page for grep, specifically the -f option.

grep -vf file2.txt file1.txt
于 2013-02-05T15:24:37.960 に答える
0

あなたの最善の策は、ファイル 2 から入力を読み取り、それをソートされたリスト (または、バランスのとれた検索ツリー) に入れ、次に file1 から各行を読み取るときに、ツリーを調べるか、バイナリ検索を行うことです。リストの文字列が存在するかどうかを確認します。

考えられるのは、許可された値のリストをできるだけ簡単に確認できるようにするために、処理を 1 回実行するということです。それらを二分探索木に入れるということは、最初にそれをリスト 2 の中央 (アルファベット順) の単語と比較することを意味し、それがその前にある場合は、左の分岐 (比較した単語の前に来る単語を含む) を取りますに、またはそれが後に来る場合は、右のブランチを見るだけで済みます。

同様に、リストを使用する場合は、リストの中央にある単語を見て、反復ごとに残りのリストの半分を考慮から除外できます。これは、list1 の各単語を list2 の n 個の単語に対してチェックするために log n ステップを実行するだけでよいことを意味します。

于 2013-02-05T15:24:19.410 に答える