如何在 Linux 或 Windows 中复制或显示两个文本文件中的唯一条目

如何在 Linux 或 Windows 中复制或显示两个文本文件中的唯一条目

我有两个文件,文件的格式是变量=值或#或#变量。所有变量的值都是未设置;是;mod。我想将这些文件中的所有条目复制到另一个文件,并且只保留唯一条目。如果两个文件具有相同的变量但值不同。我想复制带有=mod的变量。如何使用 awk 或 sed 或 grep 或 bash 脚本实现此目的?

我通常通过合并文件并复制结果到 excel 中来手动执行此操作。在 excel 中,我使用 excel 中的删除重复项功能,然后根据上述要求手动删除条目。

答案1

使用您最习惯的任何语言来构建程序。逻辑:

While not EOF (file1)
{
    Read line from file1
    While not EOF (file2)
    {
        Read line from file2
        If l-file1 = l-file2
        {
            do nothing
        }
        Else
        {
            output unique value
        }
    }
}

这将比较文件 1 的每一行与文件 2 的每一行(而不是逐行比较)。

答案2

尝试使用这个awk脚本:

NR==FNR { data[$1] = $2; next; }
!/#/ {
    if ($1 in data) {
        if ($1 == "mod") {
            print $0;
        } else {
            print $1 "=" data[$1];
        }
    } else {
        print $0;
    }
}

像这样调用它:

awk -f script -F= file1 file2

答案3

Perl 一行程序

文件一:
1
2
3

文件二:
1
4
3

仅打印唯一行
perl -lne 'print if ++$n{ $_ } == 1 ' file_one.txt file_two.txt

或者

perl -lne 'print unless ++$n{ $_ } ' file_one.txt file_two.txt

输出
1
4
3
2

相关内容