Jak skopiować lub wyświetlić unikalne wpisy z dwóch plików tekstowych w systemie Linux lub Windows

-1

Mam dwa pliki, a format plików to zmienna = wartość lub zmienna # lub #. Wartości wszystkich zmiennych są albo nieustawione; tak; mod Chcę skopiować wszystkie wpisy z tych plików do innego pliku i zachować tylko unikalne wpisy. W przypadku, gdy oba pliki mają tę samą zmienną, ale mają różne wartości. Chciałbym skopiować te z = mod. Jak to osiągnąć za pomocą skryptu awk, sed, grep lub bash?

Zwykle robię to ręcznie, łącząc pliki i kopiując wynik w programie Excel. W programie Excel korzystam z funkcji usuwania duplikatów w programie Excel, a następnie ręcznie usuwam wpisy zgodnie z powyższymi wymaganiami.

Vijayendra Kumar
źródło
A co z liniami zaczynającymi się od #?
Michael Vehrs,
obowiązuje ta sama zasada. kopiuj unikalne wpisy ignoruj ​​wszystkie #, ponieważ są komentarzem.
Vijayendra Kumar,

Odpowiedzi:

0

Zbuduj program w dowolnym języku, do którego jesteś najbardziej przyzwyczajony. Logika:

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
        }
    }
}

Spowoduje to porównanie każdej linii pliku1 z każdą linią pliku2 (zamiast porównywania linii do linii).

użytkownik186658
źródło
Nie wiem jak programować. dzięki za logikę.
Vijayendra Kumar
0

Spróbuj użyć tego awkskryptu:

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

Nazwij to tak:

awk -f script -F= file1 file2
Michael Vehrs
źródło
0

Perl jedna wkładka

plik pierwszy:
1
2
3

plik drugi:
1
4
3

Drukuj tylko unikalną linię
perl -lne 'print if ++$n{ $_ } == 1 ' file_one.txt file_two.txt

Lub

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

wyjście
1
4
3
2

Shakiba Moshiri
źródło