it-swarm.com.de

Erhalten Sie die eindeutigen Zeilen der zweiten Datei, wenn Sie zwei Dateien vergleichen

Ich habe zwei Textdateien und möchte Datei1 Zeile für Zeile lesen, in Datei2 nach der gleichen Zeile suchen und aus Datei2 entfernen.

Ich habe den Pseudocode von:

for line in file1.txt
do
  sed search line and delete in file2.txt
done
6
anlarye

Sie könnten dies mit grep erreichen.

Hier ist ein Beispiel:

$ echo localhost > local_hosts

$ grep -v -f local_hosts /etc/hosts
127.0.1.1       ubuntu

# The following lines are desirable for IPv6 capable hosts
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
6
Michael Madden

Im Allgemeinen möchten Sie die Zeilen in Datei2 behalten, die sich nicht in Datei1 befinden.

Es gibt mehr Möglichkeiten von diesen,

comm <(sort file1) <(sort file2) -23

über beitreten

join -v 1 <(sort file1) <(sort file2)

oder über AWK welches die Dateien nicht sortieren muss:

awk 'NR==FNR{lines[$0];next} !($0 in lines)' file2 file1
5
αғsнιη

Ich habe einen Weg gefunden, dies durch einige weitere Internetsuchen zu tun. Und mit nur grep auch, ohne die Datei sortieren zu müssen.

grep -Fvxf file2 file1

Dies zeigt die neuen Informationen auf dem Bildschirm an, die ein Problem darstellen, da ich das, was sich in Datei2 befand, aus Datei1 entfernen und eine neue Datei1 haben wollte. Da der obige Code funktionierte, musste ich ihn nur ergänzen, um das zu bekommen, was ich wollte.

grep -Fvxf file2 file1 > tempfile && mv tempfile file1

Das löst meine Probleme. Vielleicht nicht der beste Weg, aber es funktioniert.

0
anlarye