Bash-Skript: Vergleichen zweier Textdateien

Bash-Skript: Vergleichen zweier Textdateien

Ich frage mich, wie ich das effizient machen kann. Anhand von zwei Dateien, beispielsweise a.txt und b.txt, möchte ich ein Bash-Skript schreiben, das Folgendes tut:

Jede Zeile in a.txt, die ein „*“ enthält und in b.txt nicht vorhanden ist, wird mit einem Zeitstempel am Ende von b.txt hinzugefügt.

Den ersten und letzten Teil schaffe ich, grep "*" a.txt echo "$(date)" >> b.txt aber ich weiß nicht, wie es mit dem Rest aussieht.

Antwort1

Ich schlage vor, dass Sie eine dritte Datei für die Ergebnisse verwenden, damit Sie die b.txt-Datei nicht durcheinander bringen. Sie könnten Folgendes versuchen:

cp b.txt c.txt 
for line in $(grep '*' a.txt); do
    # for each line found in a.txt
    echo "Found: $line"
    grep -q $line b.txt   # check its presence in b.txt
    if [ $? -ne 0 ]; then
        # if the result of the grep is not equal to 0
        # it means that the line has not been found in b.txt
        # then print the line in a third file with the leading timestamp
        echo "$(date): $line" >> c.txt
    fi
done

Es ist klar, dass Sie vielleicht einfach das Grep verbessern sollten, da ich nicht weiß, wie das „*“ in der Zeile zusammengesetzt ist, in der Sie suchen.

verwandte Informationen