Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Erledigt) - Zwei Dateien - Problem Differenz auszugeben



syrius
08.12.2018, 11:33
Guten Morgen,

habe aktuell ein Problem aus zwei unterschiedlichen Dateien die Differenz zu ziehen.

Folgende Ausgangssituation

datei_archiv.db - 148360 Zeilen
datei_current.db - 148351 Zeilen

Differenz sind also 9 Zeilen. Wichtig ist für mich nun aus der datei_archiv.db die fehlenden 9 Zeilen aus datei_current.db zu erhalten.

Mein Befehl dazu lautet: cat datei_archiv.db | fgrep -vf datei_current.db

Ergenis = keines was bedeuten müsste, dass es keine Unterschiede zwischen beiden Dateien gibt. Jetzt aber zum Nächsten...

cat datei_archiv.db | sort | uniq | wc -l
sowie cat datei_archiv.db | wc -l
= 148360 Zeilen

cat datei_current.db | sort | uniq | wc -l
sowie cat datei_current.db | wc -l
= 148351 Zeilen

Ich kann also durch "sort | uniq" ausschließen, dass in einer Datei doppelte Inhalte vorhanden sind.

Wie komme ich nun an die fehlenden 9 Zeilen die in datei_current.db fehlen ?

Gruß

masterholdy
08.12.2018, 16:03
1) sort uniq auf beide datein
2) beide datein aus 1) zu einer zusammenfassen
3) zählen wie oft jede zeile jeweils vorkommt bspw: https://unix.stackexchange.com/a/170044
4) per regexp einfach gucken welche zeilen nur 1 mal vorkommen: ^1(\s)+(.*)$

sehr hässliche lösung aber wenn du das problem nur 1mal hast sollte das passen

also im terminal irgendwas in diese richtung


export f1=datei_archiv.db && \
export f2=datei_current.db && \
export tmp=tmp.txt && \
sort -du "$f1" &> "$tmp" && sort -du "$f2" >> "$tmp" && \
cat "$tmp" | sort | uniq -c | grep -wohP '^(\s)*1(.*)$' && \
rm "$tmp"

Nimbus
09.12.2018, 16:32
Wie wäre es mit diff?

syrius
11.12.2018, 14:02
Die Lösung war einfacher als erwartet.

cat datei_archiv.db | fgrep -vFx -f datei_current.db


-F, --fixed-strings
Interpret PATTERN as a (list of) fixed strings

-x, --line-regexp
Select only those matches that exactly match the whole line.