ループについては認識しておりdiff
、使用していますが、diff では必要なものを実際に取得できないようです。基本的には、2 つのファイル (file2.txt と file2.txt) を比較し、それらの間で不足しているものの出力を取得したいと考えています。
目的 1: file1.txt から file2.txt に欠けているものを見つける
目的 2: いずれかのファイルで何が欠けているかを見つけます。file1.txt にはない行が file2.txt に存在する可能性があります。それらについても知りたいです。
diff
行ごとに違いを比較して、2 つのファイルが同じではないことだけを知らせてくれます。必要なのは、ファイルを調べて行を区別しないプログラムです。file1.txt の 2 行目に '/bin/mount' を含む行があり、file2.txt の 59 行目に見つかった場合、それについて知る必要はありません。全体として何が欠けているかを知りたいだけです。これはできますか?
答え1
行の順序を気にしない場合は、まずファイルを並べ替えます。どのファイルにどの行が欠落しているかを確認するには、comm
の代わりにを使用しますdiff
。
comm <(sort file1) <(sort file2)
答え2
目的 1: file1.txt から file2.txt に欠けているものを見つける
とgrep
:
grep -xvFf file2.txt file1.txt
とcomm
:
comm -13 <(sort file1.txt) <(sort file2.txt)
およびsort
とuniq
:
sort file2.txt file2.txt file1.txt | uniq -u
目標 2: いずれかのファイルで何が欠けているかを見つけます。file1.txt にはない行が file2.txt に存在する可能性があります。それらについても知りたいです。
とgrep
:
grep -xvFf file1.txt file2.txt; grep -xvFf file2.txt file1.txt
とcomm
:
comm -3 <(sort file1.txt) <(sort file2.txt) | tr -d '\t'
およびsort
とuniq
:
sort file1.txt file2.txt | uniq -u
答え3
2つのファイル間の類似度を一致させる簡単なコードです
import numpy as np
def levenshtein(seq1, seq2):
size_x = len(seq1) + 1
size_y = len(seq2) + 1
matrix = np.zeros ((size_x, size_y))
for x in range(size_x):
matrix [x, 0] = x
for y in range(size_y):
matrix [0, y] = y
for x in range(1, size_x):
for y in range(1, size_y):
if seq1[x-1] == seq2[y-1]:
matrix [x,y] = min(
matrix[x-1, y] + 1,
matrix[x-1, y-1],
matrix[x, y-1] + 1
)
else:
matrix [x,y] = min(
matrix[x-1,y] + 1,
matrix[x-1,y-1] + 1,
matrix[x,y-1] + 1
)
#print (matrix)
return (matrix[size_x - 1, size_y - 1])
with open('original.txt', 'r') as file:
data = file.read().replace('\n', '')
str1=data.replace(' ', '')
with open('target.txt', 'r') as file:
data = file.read().replace('\n', '')
str2=data.replace(' ', '')
if(len(str1)>len(str2)):
length=len(str1)
else:
length=len(str2)
print(100-round((levenshtein(str1,str2)/length)*100,2),'% Similarity')
コンテンツと同じディレクトリに「original.txt」と「target.txt」の 2 つのファイルを作成します。