![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Regler | Links | Albums | FAQ | Members List | Kalender | Søgning | Dagens Stillinger | Mark Forums Read |
| Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her. |
Mere UNIX og Linux Forum Emner du måske kan finde Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Last Post |
| Splitting av filen i 2 på bestemte sted baseret på textpattern | borgeh | Shell Programmering og Scripting | 0 | 09-24-2007 08:02 PM |
| indsætte fil 1 på et bestemt sted i fil 2 | FFC | Shell Programmering og Scripting | 1 | 02-01-2007 11:48 AM |
| hvordan du redigerer stor fil i UNIX | balireddy_77 | Shell Programmering og Scripting | 3 | 12-14-2006 07:40 AM |
| Hjælp til at redigere en stor fil | jxh461 | Shell Programmering og Scripting | 8 | 05-19-2003 05:38 PM |
| hvordan man kan redigere store filer via VI | nazri | UNIX for dummyer Spørgsmål & svar | 3 | 06-15-2001 10:18 AM |
![]() |
|
|
LinkBack | Thread Tools | Søg denne tråd | Rate Thread | Display Modes |
|
|
|
||||
|
Rediger en stor fil på plads
Kære venner,Jeg har en fil med 50 millioner registreringer under 2 kolonner. Jeg er nødt til at gøre det nedenfor: 1. Generere nogle tilfældige tal af en fast længde. 2. Erstat den anden kolonne af tilfældigt udvalgte rækker med tilfældige tal. Jeg forsøgte at bruge en lille smule perl til at generere tilfældige tal og sed at erstatte den manuelt. Det problem jeg ser er, at det genererer en output med erstattes record med alle 50 millioner registreringer. Jeg vil hellere ikke have det output, der genereres for hver række opdatering. Jeg kunne godt tænke mig at få output når alle opdateringer, der er gjort .... Jeg tænkte, hvis jeg kunne redigere filen på plads med sed ... Jeg havde forsøgt at kigge efter dette in-sted mulighed .. men jeg dont have GNU version af SED ... Nogen tanker ...? Tak V |
|
||||
|
Her er den oprindelige flytte på dit krav:
>> 1. Generere nogle tilfældige tal af en fast længde. i \u003d 00000000 echo $ RANDOM $ i | cut-C 1-8 ovennævnte tjener til at generere tilfældige tal for mere end 50 millioner registreringer; igen ikke sikker på, hvor ofte en række gentager! ikke klart, om det andet krav. være specifik venligst ... -Ilan |
|
||||
|
Hi Ilan,
Tak for at tage dette op ... Jeg har den første brik regnet ud ... Jeg kan generere et tilfældigt tal med en lille perl script, som jeg hentede i netto ... men jeg har et problem med den anden del ... Jeg vil prøve at beskrive det bedre. Jeg har 50 millioner registreringer med 2 kolonner. Både kolonner er til stede i alle registre. Trin 1: Generer en tilfældig værdi (dette er den del jeg regnet ud ovenfor) Trin 2: Find en tilfældig record blandt de 50 millioner Step3: Erstat værdien i anden kolonne med den værdi, der genereres i trin 1. Step4: Gå tilbage til Trin 1, generere en ny værdi, skal du kigge efter en anden tilfældig registrere, erstatte det med denne værdi, og så videre for omkring en million gange. Jeg ønsker at kunne gøre dette på plads, da hver gang jeg erstatte et rekordstort bruger awk, det giver hele 50 millioner inklusive at forandring som produktion og jeg har omlægge produktionen til en anden fil, skal du omdøbe den til det oprindelige og starte forfra igen til næste iteration. Hvad jeg behøver, er en måde at redigere filen på plads i en løkke identificere tilfældige journaler og ændre den anden kolonne en million gange. De høje krav er: Da en fil på 50 millioner bøger, jeg har til at generere en fil, der har 50 millioner bøger, men har 1 million registreringer hvis anden kolonne varierer fra den første fil. Måske der er en nemmere måde at gøre dette ... Men jeg er stumped lige nu .... Tak, V |
|
||||
|
12123 | 12345678
42142 | 23442253 52315 | 32250205 .... .... ... .... .... omkring 50 millioner Nu vil jeg tilfældigt vælge journaler og ændre værdien i den anden kolonne For eksempel hvis jeg vælger den anden record tilfældigt. Jeg vil ændre 2. kolonne til en tilfældig værdi: 12123 | 12345678 42142 | 53988989 52315 | 32250205 .... .... ... .... .... samme transaktion 1 million gange, hver gang du skal vælge en anden record tilfældigt. |
|
||||
|
Jeg prøvede det følgende kode i AIX, i ksh
kode er lang, men der er ingen mens osv. lad sige din oprindelige fil origfile Trin 1. sed s /"|"/" "/ g origfile> tempfile / ** Hvis du dont have sed , skal du ændre "|" med blank med someting * / / efter denne din oprindelige fil ser sådan her 12123 12345678 * / grep-n "^ $" tempfile> origfile, rm tempfile / * efter denne din oprindelige fil ser sådan her ud; 1 12123 12345678 2 42142 53988989 2. etape. / ** producere 1 mio tilfældige tal og gemme til RandNumbersFile ** / Trin 3. / ** producere 1 mio tilfældige tal og gemme til RandRecordsFile ** / sortere-u RandRecordsFile> tempfile MV tempfile RandRecordsFile / * kan du producere 1 million numre, men hvis du sortere det unically det kan være mindre end 1 mio. skal du være sikker på, at hver enkelt linje i denne sag er unik, ovenstående kommando arrangerer dette * / Lad "NeededLine \u003d 1.000.000 -` wc-l RandRecordsFile | awk '(print $ 1)' `" / * denne linie viser dig, hvor mange nye bøger har du brug efter sortere * / counter \u003d 0 mens [$ counter-lt $ NeededLine] gøre / ** producere tilfældige RandomRecord (betyder tilfældige tal). jeg mener, skal du tilføje din kode her ** / grep $ RandomRecord RandomRecordsFile> / dev / null hvis [$? -ne 0] så echo $ RandomRecord>> RandomRecordsFile lad "counter \u003d $ counter 1" fi gjort sortere-u RandomRecordsFile> tempfile indsæt tempfile RandNumbersFile> RandomRecordsFile rm tempfile / ** Efter denne din RandomRecordsFile ser sådan her ud; 1 12345678 27 53988989 første står for registrering num, og den anden rundom område (orig andet felt) ** / slutte-v1 origfile RandomRecordsFile> tempfile / ** umatchede linjer ** / slutte-o 1.1,1.2,2.2 origfile RandomRecordsFile>> tempfile / * matchede linjer * / sortere-u tempfile> origfile / * sortere på field1 * / / ** hvis du har brug tilføjer disse linjer cut-f2, f3 origfile> tempfile sed s / ""/"|"/ g tempfile> origfile ** / rm tempfile så koden; / ** producere 1 mio tilfældige tal og gemme til RandNumbersFile ** / / ** producere 1 mio tilfældige tal og gemme til RandRecordsFile ** / cp yourfile origfile sed s /"|"/" "/ g origfile> tempfile grep-n "^ $" tempfile> origfile sortere-u RandRecordsFile> tempfile MV tempfile RandRecordsFile Lad "NeededLine \u003d 1.000.000 -` wc-l RandRecordsFile | awk '(print $ 1)' `" mens [$ counter-lt $ NeededLine] gøre / ** producere tilfældige RandomRecord (betyder tilfældige tal). jeg mener, skal du tilføje din kode her ** / grep $ RandomRecord RandomRecordsFile> / dev / null hvis [$? -ne 0] så echo $ RandomRecord>> RandomRecordsFile lad "counter \u003d $ counter 1" fi gjort sortere-u RandomRecordsFile> tempfile indsæt tempfile RandNumbersFile> RandomRecordsFile slutte-v1 origfile RandomRecordsFile> tempfile slutte-o 1.1,1.2,2.2 origfile RandomRecordsFile sortere-u tempfile> origfile rm tempfile Sidst redigeret af fazliturk; 09-03-2007 på 09:41 AM.. |
![]() |
| Bogmærker |
| Thread Tools | Søg denne tråd |
| Display Modes | Bedøm denne tråd |
|
|