私は2つの単語リスト(180kと260k)を持っていますが、私は両方のリストに表示される単語のセットである第3のファイルを生成したいと思います。2つの大きな単語リストの交差点
これを行うにはどのような方法が最適ですか?私はgrepを使って話すフォーラムを読んだが、単語リストはこの方法にとっては大きすぎると思う。
私は2つの単語リスト(180kと260k)を持っていますが、私は両方のリストに表示される単語のセットである第3のファイルを生成したいと思います。2つの大きな単語リストの交差点
これを行うにはどのような方法が最適ですか?私はgrepを使って話すフォーラムを読んだが、単語リストはこの方法にとっては大きすぎると思う。
2つのファイルがソートされている場合(またはソート可能な場合)は、comm -1 -2 file1 file2
を使用して交差点を印刷できます。
あなたは正しいです、grepは悪い考えです。 "男性はに参加します"と入力し、指示に従ってください。
あなたのファイルは、単一の列に単語の単なるリストである、または重要な単語が各行の最初のものであるならば、少なくとも、その後、すべてを行う必要がある場合:
$ sort -b -o f1 file1
$ sort -b -o f2 file2
$ join f1 f2
そうしないと、
JOIN(1) BSD General Commands Manual JOIN(1)
NAME
join -- relational database operator
SYNOPSIS
join [-a file_number | -v file_number] [-e string] [-o list] [-t char] [-1 field] [-2 field] file1 file2
DESCRIPTION
The join utility performs an ``equality join'' on the specified files and writes the result to the standard output. The ``join field'' is the field in each file by which the files are compared. The
first field in each line is used by default. There is one line in the output for each pair of lines in file1 and file2 which have identical join fields. Each output line consists of the join field,
the remaining fields from file1 and then the remaining fields from file2.
. . .
. . .
は、1行に1つの単語を推定、私はgrep
を使用します:(1)いくつかの追加の指示を命じる参加与える必要があるかもしれません
grep -xFf seta setb
-x
-F
は文字通り(非正規表現)を与えられたパターンを解釈しない全行(部分的な一致を)一致-f seta
はsetb
を検索するパターンを指定するコンテンツを検索するためのファイルでありますseta
comm
の同じことを行うが、事前にソートされるように、あなたのセットを必要とします:
comm -12 <(sort seta) <(sort setb)
* grep -xFf *も機能し、同じ結果が得られているようです(結果の行数が等しいと判断)。私は、* comm *メソッドよりも(計算上)少し時間がかかったと思います。ありがとう! – pjama
grep -P '[ A-Za-z0-9]*' file1 | xargs -0 -I {} grep {} file2 > file3
私は、これはFILE1で何かを探し信じているファイルfile1にあったことはFILE2であり、かつFILE3に一致するものを置く場合は、チェックします。
が戻る私は似た何かをするPerlスクリプト見つけることができた日数:それはそれらのいずれかを判明
[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)はお勧めできませんので、SOの回答は解決策の検索の終点になるはずです(対時間の経過とともに古くなる傾向がある参照の途中降機)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra
をソートする - あなたは他のものをソートするために私に指示を与えることができますか? – pjama
'sort -o outfile infile'だけで、他のファイルもアルファベット順にソートされていると仮定します。しかし、ロケールには注意してください。特に注文が「AaBb」か「ABab」かは変更可能です。安全のためには、両方のファイルを明示的にソートして、同じ設定を使用していることを確認してください。 –
ヘルプのおかげでエレミヤ!ソートはうまくいきましたが、* comm *は "comm:file 2はソート順ではありません"と警告しましたが、*何かを生成したようです*。これはOKですか?私は午前中にいくつかのQAを行います:) – pjama