seth_not@home: Ultraedit, suche regulären Ausdruck, meiner reicht nicht!

Beitrag lesen

gudn tach!

14.08.2006 08:00:00 104.00
14.08.2006 08:00:01 104.00
...
14.08.2006 21:59:59 103.93
14.08.2006 22:00:00 103.93 -1

Alle sollte doch jedes file 46800 Zeilen habe, oder?
(8h-22h = 13 Stunden) 13*60*60 = 46800 (Sekunden/Zeilen)

46801, ja.

Kann man mit vim die files vergleichen zu welchen Zeiten Unstimmigkeiten herrschen?

kurze antwort: ja, vim kann alles, wenn's um's dateien-editieren geht.

um zwei dateien zu vergleichen kann man den parameter "-d" verwenden:
vim -d file1 file2

problem ist allerdings, dass sich die zeilen ja (fast) alle in der dritten spalte unterscheiden.
deswegen koenntest du in einem ersten schritt kopien anlegen, denen die dritte spalte fehlt.
die dritte spalte loeschen kann man in vim mit

:%s/^([^\t]+\t[^\t]+).*/\1/

stichwort: regulaere ausdruecke in vim

wenn du aber eh vim benutzen moechtest, kannst du auch gleich damit in den urspruenglichen dateien die "doppelten" zeilen loeschen.

:%s/(14.08.2006\t[^\t]+)(\t.*\n)(\1\t.*\n)*/\1\2/g

kurze erklaerung:
command-line-mode
% komplettes file
s suche und ersetze. s/a/b/g heisst "ersetze a durch b ueberall" (g=global)

such-ausdruck:
(14.08.2006\t[^\t]+)(\t.*\n)(\1\t.*\n)*

(14.08.2006\t[^\t]+) matcht die ersten beiden spalten und speichert sie in \1
(\t.*\n) matcht den rest der zeile und speichert ihn in \2
(\1\t.*\n)* matcht folgende zeilen deren erste beiden spalten identisch zur aktuellen zeile sind.
(je nach datei-format musst du noch das zeilenende \n durch \r\n oder \n\r ersetzen.)

ersetz-ausdruck:
\1\2

prost
seth