Log Files vergleichen

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
MisterX
Newbie
Newbie
Beiträge: 7
Registriert: 19. Nov 2010, 11:27

Log Files vergleichen

Beitrag von MisterX » 6. Feb 2017, 11:23

Hallo,

ich habe zwei Logs- Files in folgender Form:

file1.txt:

Port
443 17.168.10.10
22 192.168.125.4
80 10.8.164.30
21 10.17.77.33
80 10.7.17.10
......

file2.txt:
10.8.164.30 server1
10.8.164.57 server2
10.3.32.30 server3
10.17.77.33 server4
10.25.23.2 server5
........


Die IP Adressen in file1 sollen mit den Adressen + Hostnames in file2 verglichen werden. Der erwartete output wäre dann folgender:

80 10.8.164.30 server1
21 10.17.77.33 server4

Kann mir hier vielleicht jemand weiterhelfen?

Wenn ich die Port- Zuordnung (erste Spalte) aus file1.txt herausnehme, dann bekomme ich den Abgleich mit file2.txt hin:

for i in $(cat file1.txt); do grep -w $i file2.txt; done

Viele Dank im Vorraus und Grüße

Werbung:
Benutzeravatar
moenk
Administrator
Administrator
Beiträge: 1382
Registriert: 15. Aug 2003, 15:36
Wohnort: N52° 27.966' E013° 20.087'
Kontaktdaten:

Re: Log Files vergleichen

Beitrag von moenk » 6. Feb 2017, 13:08

Einlesen in LibreOffice mit Space als Delimiter und dann mit SVerweis zusammenbasteln?
Bild Denkst Du noch selber oder bist Du schon Schwarm?

marce
Advanced Hacker
Advanced Hacker
Beiträge: 898
Registriert: 19. Jun 2008, 13:16
Wohnort: Dettenhausen
Kontaktdaten:

Re: Log Files vergleichen

Beitrag von marce » 6. Feb 2017, 13:18

Code: Alles auswählen

man join
hülft auch in vielen Fällen...

Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3141
Registriert: 25. Aug 2004, 02:13

Re: Log Files vergleichen

Beitrag von robi » 6. Feb 2017, 18:14

join ist ein brauchbarer Befehl dafür, aber geht leider erst nachdem die Daten sortiert sind. Normalerweise müsste auch noch ein uniq drüber sonst gibt's gerade bei Logs wo Einträge auch mehrmals vorkommen können eventuell Probleme, also hier ziemlich unpraktisch. aber vielleicht mal als Anregung:

Code: Alles auswählen

sort -k 2 file1.txt > file3.txt
sort -k 1 file2.txt > file4.txt
join -1 2 -2 1 file3.txt file4.txt | cut -d " " -f 1,3
Tabellenkalkulation, ist nur was für Studierte und leitende Mitarbeiter ;)

Auf der reinen Shellkonsole eventuell umständlich und in solchen Fällen wird das bei großen Datensätzen ziemlich langsam, aber dennoch leicht machbar. hier mal kleines Beispiel.
(Das eventuell funktioniert wenn in file2.txt die Daten nicht mehrfach vorkommen, ansonsten muss man eventuell bei grep mit "-m 1" gegenwirken)

Code: Alles auswählen

while read P IP ; do grep $IP file2.txt; done < file1.txt

AWK wäre aber eine gute Möglichkeit: (versteht aber kaum noch jemand)
hier mal 2 Möglichkeiten je nachdem was dich mehr interessiert was in file1.txt oder in file2.txt nicht enthalten ist

Code: Alles auswählen

awk 'r==""{r=FILENAME};r==FILENAME{A[$2]+=1};r!=FILENAME{if(A[$1]){print $1,$2}else{print $1,"\t\tin",r,"nicht enthalten"}}' file1.txt file2.txt

awk 'r==""{r=FILENAME};r==FILENAME{A[$1]=$2};r!=FILENAME{if(A[$2]){print $2,A[$2]}else{print $2,"\t\tin",r,"nicht enthalten"}}' file2.txt file1.txt
awk hat hier so seine Vorteile insbesondere bei großen Dateien oder wenn mehrere Dateien mit einer Datei verglichen werden sollten. ZB. bei Variante 2 könntest du hinten einfach auch gleich mehrere Dateiname angeben die das Format von file1.txt haben.

Benutzeravatar
framp
Moderator
Moderator
Beiträge: 4230
Registriert: 6. Jun 2004, 20:57
Wohnort: bei Stuttgart
Kontaktdaten:

Re: Log Files vergleichen

Beitrag von framp » 6. Feb 2017, 19:42

robi hat geschrieben:
6. Feb 2017, 18:14
AWK wäre aber eine gute Möglichkeit: (versteht aber kaum noch jemand)
Daran merkt man dass man alt wird :lol:

Es ist ja nicht nur ein einfacher Vergleich sondern auch noch etwas mehr und genau dafür ist awk prädestiniert :thumbs:

MisterX
Newbie
Newbie
Beiträge: 7
Registriert: 19. Nov 2010, 11:27

Re: Log Files vergleichen

Beitrag von MisterX » 7. Feb 2017, 09:09

Guten Morgen,

vielen Dank für die Antworten:

Ich habe es jetzt so gelöst:

Code: Alles auswählen

less file1.txt |sort -d |uniq > file3.txt
less file3.txt | cut  --output-delimiter=" " -f1-3 > file4.txt
awk 'NR==FNR{a[$1]=$2;next}a[$2]{print $0"\t"a[$2]}' file2.txt file4.txt > file5.txt

awk '{$2=$2};1' file5.txt | sed 's/ /;/g' > excel.csv
Ist zwar ein bisschen umständlich und wäre bestimmt auch einfacher gegangen :D

Viele Grüße

josef-wien
Guru
Guru
Beiträge: 4873
Registriert: 23. Sep 2008, 17:09

Re: Log Files vergleichen

Beitrag von josef-wien » 7. Feb 2017, 11:27

MisterX hat geschrieben:
7. Feb 2017, 09:09
wäre bestimmt auch einfacher gegangen
Zumindest hinsichtlich der unnützen Verwendung von less und uniq stimme ich Dir zu:

Code: Alles auswählen

sort -du file1.txt > file3.txt
cut --output-delimiter=" " -f1-3 file3.txt > file4.txt
Oder wenn file3.txt sonst nicht benötigt wird:

Code: Alles auswählen

sort -du file1.txt | cut --output-delimiter=" " -f1-3 > file4.txt

Antworten

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 Gäste