Επιστροφή στο Forum : Επεξεργασία ΠΟΛΥ μεγάλου txt αρχείου
Καλημέρα σε όλους.
Αντιμετωπίζω το εξής πρόβλημα. Έχω ένα logfile σε text μορφή μεγέθους 2,7GB (Το G δεν είναι λάθος είναι Giga). Το αρχείο είναι χωρισμένο σε στήλες που δυστυχώς έχουν διαφορετικούς delimiters η κάθε μία. Άλλη έχει 1 tab άλλη 2 άλλη έχει space.
Αυτό που θέλω να κάνω είναι να σορτάρω το αρχείο ανά μια συγκεκριμένη στήλη. Λόγω το μεγέθους του αρχείου κλασσικές λύσεις αχρηστεύονται. Έχω δοκιμάσει με το Ultra Editor αλλά μέχρι στιγμής δεν τα έχω καταφέρει. Έχει κανείς καμιά άλλη ιδέα?
kourampies
17-06-07, 15:11
Από ότι ξέρω στους περισσότερους "μοντέρνους" text editors, το μέγιστο υποστηριζόμενο μέγεθος εξαρτάται αποκλειστικά απο την διαθέσιμη μνήμη... Τουλάχιστον με το PSPad και το Programmers File Editor που χρησιμοποιούσα κατα καιρούς.
Θα μπορούσες το κάνεις import σε μια βάση δεδομένων στον SQL server. Μπορεί να δυσκολευτείς λίγο στην αρχή αλλά πραγματικά οι βάσεις δεδομένων είναι απίστευτο εργαλείο εάν πάρεις την κρυάδα.
Κατέβασε τον SQL server 2005 express edition και το Management Studio Express από εδώ: http://msdn.microsoft.com/vstudio/express/sql/
Πρέπει να έχεις εγκατεστημένο το .net framework 2.0, εφού εγκαταστήσεις τον SQL μπορείς να κάνεις import τα δεδομένα σε μια βάση με τη χρήση DTS. Απο εκεί και πέρα το μόνο που σε περιορίζει για το τι θα κάνεις είναι η φαντασία σου. Ίσως σου φανεί βουνό αρχικά αλλά δεν είναι τίποτα, με την χρήση οδηγών θα ολοκληρώσεις τα περισσότερα βήματα.
Η access και το excel έχουν περιορισμό τα 65000 rows εάν δεν κάνω λάθος και δεν είναι free σε περίπτωση που δεν τα έχεις.
Η access και το excel έχουν περιορισμό τα 65000 rows εάν δεν κάνω λάθος και δεν είναι free σε περίπτωση που δεν τα έχεις.
To excel έχει τέτοιο περιορισμό. Η access όμως όχι, αν δεν κάνω τραγικό λάθος...
Έχεις δίκιο για τον αριθμό των rows! Το δοκίμασα και όντως δεν έχει κόφτη στα 65k, υπάρχει όριο όμως στο μέγεθος της βάσης. Γενικά χρησιμοποιώ ελάχιστα το office :P
http://office.microsoft.com/en-us/access/HP051868081033.aspx
Microsoft Access database (.mdb) file size: 2 gigabytes minus the space needed for system objects
Έκανα κάτι παρόμοιο τελευταία. Χρησιμοποίησε κάποια απλή scripting γλώσσα για να διαβάσεις το αρχείο γραμμή γραμμή, χώρισε τα πεδία όπως θέλεις και πέρνα τα στη βάση (εγώ το έκανα σε mysql). Κάτι πιο γρήγορο/εύκολο δυστυχώς δε γνωρίζω.
Το UltraEdit είναι ένας πανίσχυρος editor και έχει και πολύ ισχυρά macros (κάνεις εσύ recording ό,τι θες).
Μήπως μπορεί να σου κάνει τη δουλειά σου;
Κάτι τέτοιο εννοούσα
http://www.modwest.com/help/kb6-253.html
Έχω κάνει το 2.
Νομίζω δουλειά με τη λύση που περιγράφεται στο πρώτο μέρος δε γίνεται, γιατί όπως είπες, το αρχείο έχει και διαφορετικούς delimiters. Οπότε parsing με τον ένα τρόπο ή με τον άλλο, οπότε script. Καλή τύχη.
:hmm:
Γιατί δεν κάνεις καταρχήν το αρχείο ομοιόμορφο χρησιμοποιώντας τα ίδια delimeters και συνεχίζεις μετά από εκεί ευκολότερα (μπορείς να κάνεις ταξινόμηση και με το excel 2007 που νομίζω ότι δεν έχει περιορισμό γραμμών).
OPEN f FOR INPUT AS #1
OPEN ft FOR OUTPUT AS #2
DO UNTIL EOF(1) 'keep reading unless we've read everything
LINE INPUT #1, a$
a$ = ReplaceStr(a$ , delimeter1, delimeter2)
PRINT #2, a$
LOOP
CLOSE #1
CLOSE #2
Edit: άκυρο, και το excel 2007 έχει λίμιτ στο 1 εκατομύριο γραμμές οπότε θα χρειαστεί προγραμματάκι άλλο για να κάνει την ταξινόμηση.
Η άλλη λύση που δοκίμασα ήταν το Matlab το οποίο από τη γρήγορη δοκιμή που έκανα δεν κατάφερνε να διαβάσει σωστά τα delimiters και επιπλέον δεν μπορούσε να χωρίσει στήλες βάσει παραπάνω του ενός χαρακτήρα.
Τελικά τα κατάφερα με το Ultra Edit. Το ζόριζα από χθες αλλά τελικά το έφτιαξε.
Το πρόγραμμα είνα πραγματικά φοβερό. Δεν έχει κανένα πρόβλημα με το μέγεθος καθώς διαχειρίζεται τη μνήμη με πολύ καλό τρόπο. Μπορείς να ορίσεις εσύ τις στήλες που θέλεις αν και αυτόματα τις βγάζει πολύ σωστά.
Όταν βέβαια ξεκίνησε να χωρίζει στήλες στο αρχείο και να σορτάρει του πήρε ένα οκτάωρο αλλά ο υπολογιστής ήταν λειτουργικός κατά τη διάρκεια της εργασίας. Πραγματικά πολύ καλό και όπως λέει o WAntilles πανίσχυρο. Έχει πολλά features που δε χρησιμοποίησα.
Ευχαριστώ για όλες τις προτάσεις. Αν δε δούλευε και αυτό η μόνη λύση θα ήταν ο SQL εκεί είχα καταλήξει και εγώ. :oneup:
οκτάωρο? :scared:
Εάν σορτάρεις με βάση ένα συγκεκριμένο πεδίο και χρησιμοποιήσεις ένα clustered index το ίδιο πράγμα θα σου παίρνει μερικά milliseconds. Αν ασχολείσαι συστηματικά με τέτοια πράγματα θα άξιζε να ψαχτείς με SQL. Anyway, τουλάχιστο βρήκες άκρη! :oneup:
αν δε σου αρέσει η sql λύση που τη θεωρώ καλύτερη προσπάθησε με κάποιον hex editor..
Συστηματικά όχι. Ήταν η πρώτη φορά και ελπίζω η τελευταία. Τα logs μέχρι τώρα ήταν μόνο βάση χρονικής σειράς.
Δεν ξέρω γιατί του πήρε τόση ώρα εφόσον είχα αφαιρέσει και το backup αρχείο και το line indexing. Δεν ξέρω αν εκτός SQL είναι και φυσιολογικός αυτός ο χρόνος, δεν έχω πείρα. Πάντως η διαφορά με τα msec είναι αρκετός λόγος για να ψαχτώ με SQL έχεις δίκιο.
Και πάλι ευχαριστώ για τη βοήθεια.
οκτάωρο? :scared:
Εάν σορτάρεις με βάση ένα συγκεκριμένο πεδίο και χρησιμοποιήσεις ένα clustered index το ίδιο πράγμα θα σου παίρνει μερικά milliseconds. Αν ασχολείσαι συστηματικά με τέτοια πράγματα θα άξιζε να ψαχτείς με SQL. Anyway, τουλάχιστο βρήκες άκρη! :oneup:
Αυτό το milliseconds το λες μετά λόγου γνώσης για το συγκεκριμένο παράδειγμα του φίλου μας (2,7GB) ή ενδεικτικά ότι με τη βάση δεδομένων θα γίνεται πιο γρήγορα; Ρωτάω με πραγματική απορία, γιατί δεν έχω την ευκαιρία να δουλεύω με τόσο μεγάλες βάσεις, ώστε να το διαπιστώσω στην πράξη εάν ισχύει...
2,7GB θεωρούνται σχετικά λίγα για βάση δεδομένων, αυτή την στιγμή δουλεύω πάνω σε βάση η οποία είναι λίγο μικρότερη από 2 terabyte. Όσο για το συγκεκριμένο παράδειγμα, εάν δημιουργήσει clustered index στο πεδίο που χρησιμοποιεί για να κάνει order τότε όντως ο χρόνος θα είναι ελάχιστος. Φαντάζεσαι κάθε φορά που έκανες αναζήτηση στο google ή έψαχνες για ένα τραγούδι στο itunes να περίμενες 10 ώρες? Εννοείται πως η express edition έχει περιορισμούς στο performance, υποστηρίζει 1 cpu , 1gb ram και 4gb db size (data , το μέγεθος των logs δεν συνυπολογίζεται) παρʼ όλα αυτά θεωρώ ότι είναι ένα από τα καλύτερα free tools που έχει βγάλει ποτέ η ms. Περισσότερα για τις διάφορες εκδόσεις εδώ: http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx
Ευχαριστώ για την απάντηση Thuglife. :respekt:
Υπάρχουν 2 εναλλακτικές. 1. Φώρτωσέ το στο MATLAB. Για το πρόγραμμα αυτό, 2.7GB είναι ψωμοτύρι. 2. Αν δεν έχεις το MATLAB, φτιάξε ένα προγραμματάκι σε κάποια γλώσσα προγραμματισμού (π.χ. C, QB, ή ό,τι άλλο προτιμάς) και κάνε έτσι τη δουλειά σου, όπως είπε και 1 συμφορουμίτης.
@ ADSLgr.com All rights reserved.