web-dev-qa-db-ja.com

2つの異なるファイルで重複する行を見つける方法は? Unix

UNIX端末から、diff file1 file2を使用して2つのファイルの違いを見つけることができます。 2つのファイルの類似性を表示する同様のコマンドはありますか? (必要に応じて、多くのパイプを使用できます。

各ファイルには、文字列文を含む行が含まれています。それらはソートされ、重複する行はsort file1 | uniqで削除されます。

file1http://Pastebin.com/taRcegVn

file2http://Pastebin.com/2fXeMrHQ

そして、出力は両方のファイルに現れる行を出力するはずです。

outputhttp://Pastebin.com/FnjXFshs

私はpythonを使用してそれを行うことができますが、ターミナルに入れるには少し多すぎると思います:

x = set([i.strip() for i in open('wn-rb.dic')])
y = set([i.strip() for i in open('wn-s.dic')])
z = x.intersection(y)
outfile = open('reverse-diff.out')
for i in z:
  print>>outfile, i
14
alvas

@tjamesonが述べたように、それは別のスレッドで解決されるかもしれません。別のソリューションを投稿したいだけです:sort file1 file2 | awk 'dup[$0]++ == 1'

  1. awkの基本を理解するには、 awkガイド を参照してください。行のパターン値がtrueの場合、この行が印刷されます

  2. dup [$ 0]はハッシュテーブルであり、各キーは入力の各行であり、元の値は0であり、この行が発生するとインクリメントします。再び発生すると、値は1になるはずなので、dup[$0]++ == 1はtrueです。次に、この行が印刷されます。

これは、質問で指定されているように、どちらのファイルにも重複がない場合にのみ機能することに注意してください。

13
user1149862

AWKを使用せずに繰り返し行のリストを取得する場合は、 -dフラグを使用してuniq を実行できます。

sort file1 file2 | uniq -d
29
Narcolei