Wie kann ich den Unterschied zwischen 2 Dateien ausgeben?


11

Meine Datei besteht aus folgenden Elementen: grob:

username:username:username:username:username 

Die obige Zeile enthält weiterhin ca. 600 Zeichen.

Ich verwende den awkBefehl, um ihn als Argument in einer API / HTTP-Anforderung zu verwenden, die über die Befehlszeile gesendet wird.

Ich verwende mein Skript, um eine Liste der Benutzerkonten zu erhalten, die mir folgen, und vergleiche etwa alle 24 Stunden die ursprüngliche Liste auf meiner Festplatte mit der neu ausgegebenen Benutzernamenliste (und erkläre, wer nicht mehr folgt mich . ich muss meine Logik in einer Schleife kapseln bash verwenden .. testen jedes Benutzernamen ein .

Mein aktuelles Skript:

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

Meine Frage ist;
Wie kann ich den Unterschied zwischen 2 Dateien ausgeben?


Sie wissen davon diff, richtig?
schaiba

@schaiba Danke. Bin gerade auf das in einem anderen Forum gestoßen, funktioniert super. Ich war vorher nicht darauf gestoßen. Ich hoffe, diese Antwort ist nützlich für zukünftige Fragen anderer Mitglieder.
Ben

@schaiba kann genauso gut eine Antwort darauf geben. Stellen Sie sicher, dass Sie sich mit Diff befassen, wenn Sie an Linien und nicht an Feldern arbeiten.
Terdon

Antworten:



13

Bei zwei Dateien mit unsortierten Benutzerlisten, z

In file1:
    userD
    user3
    userA
    user1
    userB

und

In file2:
    user3
    userB
    userX
    user1

Dann können Sie eine einfache Liste der Benutzer erstellen file1, die nicht file2angezeigt werden

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

und ähnlich, um die Benutzer in, file2aber nicht in zu bekommenfile1

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

Wenn die Liste Dateien , die bereits sortiert sind, können diese vereinfacht werden comm -23 file1 file2und comm -13 file1 file2jeweils.


1
Ist es möglich, commohne zu sortieren? Meine Textdatei hat Werte wie 1, 2, 01, 02, 0000, 0001, 0002usw. Verwendung sortwird De-Art den Auftrag ...
Lanti

6

Der beste Befehl, um den Unterschied im Inhalt der Dateien anzuzeigen, wäre

vim -d file1 file2

3

diff [options] from-file to-file

diff vergleicht den Inhalt der beiden Dateien von Datei zu Datei. Sie können die angeben -i Option Änderungen für den Fall ignoriert werden. Betrachten Sie Groß- und Kleinbuchstaben als gleichwertig.

Weitere Informationen finden Sie unter folgendem Link: http://www.computerhope.com/unix/udiff.htm oder auf der Handbuchseite.


2

Sie können die gleichen Fenster wie versuchen fc Befehl unter Unix und Linux dh den diff <file_new> <file_old>Befehl.

Linie mit +++oder ---vor ihnen hat sich geändert und eine ohne +'sund-'s hat sich nicht geändert

Linien mit - Vorzeichen werden aus der neuen Datei entfernt, obwohl sie in der alten Version vorhanden waren

Zeilen mit +Vorzeichen werden aus einer neuen Datei hinzugefügt, waren jedoch in der alten Version der Datei nicht vorhanden

Linux-Notation

Linux verwendet > und<

>bedeutet, dass die Zeile aus der alten Datei <die Zeile aus der neuen Datei bedeutet, die in der alten Datei geändert wird


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.