与另一个 txt 文件相比,如何查看 txt 文件的唯一值?

How to see unique values of a txt file with compared to another txt file?

我有两个 txt 文件,每一行都是一个条目。例如;

    #first txt file

        Jonathan25
        Donald32
        Ethan21
        mjisgoat

    #second txt file

        Ethan21
        leonardo1111
        michalengeloo
        Jonathan25

我如何构建我的代码来提供存在于第二个 txt 文件不存在于第一个 txt 文件[=21]中的唯一值=]?实际上,应该将第二个 txt 文件的第一个元素与第一个 txt 文件的所有元素进行比较。然后,如果没有匹配项,我需要查看值。在这种情况下,我想得到的结果是 "leonardo1111" "michalengeloo".

使用 awk:awk 'FNR==NR {a[[=10=]]++; next} !a[[=10=]]' first_txt_file second_txt_files

Python,使用集合:https://docs.python.org/3/tutorial/datastructures.html#sets

a = [1,2,3,4]
b = [2,3,4,5]
c = filter(lambda x: x not in a, b)

在这种情况下,c 将只包含 1 个元素 - 5 所以你可以尝试将file1的内容读入a,将file2的内容读入b。

Python 中的简单方法是将两个文件读入集合,然后应用 set difference。我们还应该确保换行符被剥离,以涵盖像 Jonathan25\nJonathan25 这样的情况,它们应该相等,但如果包含 \n 则不会。

with open("file1.txt") as f1, open("file2.txt") as f2:
    s1 = {line.strip() for line in f1}
    s2 = {line.strip() for line in f2}

    print(s2.difference(s1))

输出:

{'michalengeloo', 'leonardo1111'}

另一种方法: 集合算术,https://stromberg.dnsalias.org/~strombrg/set-arithmetic/

使用集合算术,您可以:

$ set-arithmetic --difference second.txt first.txt 
michalengeloo
leonardo1111

写在Python。它将输入文件的每一行视为一个集合元素。

您可以在unix 中使用join 命令。对每个文件进行排序。那么

$ join -1 1 -2 1 -v 2 -o 0 file1 file2

或者您可以使用 python: 1. 创建一个集合。逐行循环 file1 并将单词放入集合中。 2. 循环遍历 file2,并在刚刚为 file2 中的每个单词创建的集合中进行搜索。集合中找不到的就是你需要识别的词。