2 つのファイルを比較したい。ファイル1.txt ファイル2.txt
file1.txt
name1
name2
name3
file2.txt
nameA
nameB
name1
nameC
grep を使用して 2 つのファイルを確認し、name1 が両方のファイルに含まれているとします。どうすればいいですか?
Try
grep -f file1.txt file2.txt
From man:
-f FILE, --file=FILE Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)
Using comm(1)
:
comm -1 -2 <(sort file1.txt) <(sort file2.txt)
OUTPUT
name1
EXPLANATIONS
`-1 -2 means to suppress column 1 & 2, and keeping only the intersect.
NAME
comm - compare two sorted files line by line
You can use the -f
option in grep
to feed the first file in as a "file of patterns", and perform grep
on the second file as the actual search space:
grep -f file1.txt file2.txt
Breakdown:
grep
: invoke the grep tool-f file1.txt
: specify file1.txt
as the file that holds your search patternsfile2.txt
: name of the file to be used for your search space.Set は Python でリストを比較するのに便利です。
>>> f1 = set( l.strip() for l in open('file1.txt'))
>>> f2 = set( l.strip() for l in open('file2.txt'))
>>> print "\n".join( f1 & f2)
name1
また、差分も生成できます。
>>> print "\n".join( f1 - f2)
name2
name3
>>> print "\n".join( f2 - f1)
nameB
nameC
nameA
パフォーマンスに関心がある場合は、@Jon Clements の提案に従って、次のフォームを使用してください。
f1 = set( l.strip() for l in open('file1.txt'))
common = f1.intersection(l for l in open('file2.txt'))
print "\n".join( common )
「file2.txt」の内容をメモリに保存しないため、メモリ効率が高く高速です。
diff を使用してファイルを比較できます。
diff file1.txt file2.txt