Linux上の2つのファイルの行データの正確な違い

Linux上の2つのファイルの行データの正確な違い

2つのファイル間の違いを正確に出力する必要があります。データはカンマ区切りの行にあり、多くの行があります。たとえば、1行だけを示しました。すべての文字列は、他のファイルのすべての文字列を見つける必要があります。

例:

ファイル1.txt

abc,def,ghi,klm,nop
one,two,three,four,five,six

ファイル2.txt

abc,def,ghi,klm,nop
one,two,three,test,four,five,six

予想出力:

test

答え1

Python近い違いライブラリ(増分計算ヘルパー)とシステム基準寸法:

diff.py:

import difflib, sys

with open(sys.argv[1], 'r') as f1, open(sys.argv[2], 'r') as f2:
    differ = difflib.Differ()
    for l in differ.compare(f1.read().split(','), f2.read().split(',')):
        if (l.startswith('+ ') or l.startswith('- ')):
            sys.stdout.write(l[2:] + '\n')

使用法:

python differ.py file1.txt file2.txt

出力:

test

difflib.Differ- テキスト行の順序を比較し、人間が読める差やデルタを生成するクラス

答え2

古典的なgnu awkメソッドは常に次のようになります。

awk -v RS=",|\n" 'NR==FNR{seen[$0]++;next}!seen[$0]' file1 file2 
test

これは awk ライン/レコードの区切り記号 (RS) でコンマを使用するために機能するため、ファイルごとに次の出力が得られます。

awk -v RS=",|\n" '{print $0}' file1
abc
def
ghi
klm
nop
one
two
three
four
five
six

関連情報