
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.