Linux中两个文件中行数据的精确差异

Linux中两个文件中行数据的精确差异

需要准确输出两个文件之间的差异。数据位于以逗号分隔的行中,并且有很多行,例如我只向您展示了一行。每个字符串应该查找其他文件中的每个字符串。

例子:

文件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接近与差异库(计算增量的助手)和系统模块:

差异.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

相关内容