Jak mogę wyprowadzić różnicę między 2 plikami?


11

Mój plik składa się z następujących elementów; w przybliżeniu:

username:username:username:username:username 

Powyższa linia kontynuuje do około 600 znaków.

Korzystam z awkpolecenia, aby użyć go jako argumentu w żądaniu API / HTTP wysłanym z wiersza polecenia.

Korzystam ze skryptu, aby uzyskać listę kont użytkowników, które „śledzą” mnie, a co około 24 godziny, porównując oryginalną listę na moim dysku twardym z listą nowo wydrukowanych nazw użytkowników (i powtarzając, kto nie obserwuje ja . Będę musiał zamknąć moją logikę w pętli, używając bash .. testując każdą nazwę użytkownika.

Mój obecny skrypt:

user=$(awk -F: '{ print $1 }' FILE)  # Grab $User to use as an argument.  
following=$(exec CURRENT_FOLLOWERS) # Outputs the new file

echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155"  

          SAVE CURRENT FOLLOWERS TO NEW A FILE.  


if [[ DIFFERENCE IS DETECTED ]] ; then    

          echo -ne "$User NO LONGER FOLLOWING YOU\r"

   else echo -ne "This user is following you still.\r"
fi

Moje pytanie brzmi;
Jak mogę wyprowadzić różnicę między 2 plikami?


Wiesz o tym diff, prawda?
schaiba

@schaiba Dziękujemy. Właśnie natknąłem się na to na innym forum, działa świetnie. Nie natknąłem się na to wcześniej. Mam nadzieję, że ta odpowiedź przyda się w przyszłych zapytaniach innych członków.
Ben

@schaiba może również udzielić odpowiedzi na to pytanie. Pamiętaj jednak, aby poradzić sobie z różnicą pracującą na liniach, a nie na polach.
terdon

Odpowiedzi:



13

Biorąc pod uwagę dwa pliki zawierające nieposortowane listy użytkowników, np

In file1:
    userD
    user3
    userA
    user1
    userB

i

In file2:
    user3
    userB
    userX
    user1

następnie, aby uzyskać prostą listę użytkowników, file1ale nie file2możesz, możesz to zrobić

$ comm -23 <(sort file1) <(sort file2)
userA
userD

i podobnie, aby wprowadzić użytkowników, file2ale nie wejśćfile1

$ comm -13 <(sort file1) <(sort file2)
userX

Jeśli pliki listy są już posortowane, można je odpowiednio uprościć comm -23 file1 file2i comm -13 file1 file2.


1
Czy można używać commbez sortowania? Mój plik tekstowy ma wartości podoba 1, 2, 01, 02, 0000, 0001, 0002, itd. Korzystanie sortbędzie de-sort rozkaz ...
marki Lanti

6

Najlepszym poleceniem do wyświetlenia różnicy w zawartości plików jest

vim -d file1 file2

3

diff [options] from-file to-file

diffporównuje zawartość dwóch plików z pliku i do pliku. Możesz określić -iopcję, która ignoruje zmiany w przypadku; rozważ równoważne pisanie dużymi i małymi literami.

Aby uzyskać więcej informacji, możesz skorzystać z tego linku: http://www.computerhope.com/unix/udiff.htm lub zajrzeć na stronę podręcznika.


2

możesz wypróbować te same okna, co fcpolecenie w systemach Unix i Linux, tj diff <file_new> <file_old>. polecenie.

Linia z +++lub ---przed nimi zmieniła się i jedna z nie +'si -'snie zmieniła się

Linie ze -znakiem są usuwane z nowego pliku, ale istniały w starej wersji

Linie ze +znakiem są dodawane z nowego pliku, jednak nie istniały w starej wersji pliku

Notacja systemu Linux

Linux używa > i<

>oznacza wiersz ze starego pliku <oznacza wiersz z nowego pliku, który został zmieniony w starym pliku


0

Idź do vimdiff dla Pokazuje różnice między dwoma, trzema lub czterema wersjami tego samego pliku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.