![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Uppdelning av filen i 2 på viss plats bygger på Textpattern | borgeh | Shell-programmering och Skript | 0 | 09-24-2007 08:02 |
| infoga fil 1 på en viss plats för filen 2 | JCR | Shell-programmering och Skript | 1 | 02-01-2007 11:48 |
| hur du ändrar stor fil i UNIX | balireddy_77 | Shell-programmering och Skript | 3 | 12-14-2006 07:40 |
| Hjälp för att redigera en stor fil | jxh461 | Shell-programmering och Skript | 8 | 05-19-2003 05:38 |
| hur man redigerar stora filer använder vi | nazri | UNIX for Dummies Frågor & Svar | 3 | 06-15-2001 10:18 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Redigera en stor fil på plats
Folk,Jag har en fil med 50 miljoner poster med 2 kolumner. Jag måste göra det nedan: 1. Generera en del slumptal av en fast längd. 2. Ersätt den andra kolumnen i slumpvis valda rader med slumptal. Jag försökte med hjälp av lite perl att generera slumptal och sed att ersätta den manuellt. Problemet jag ser är att den genererar en output med ersättas titelinformation med alla 50 miljoner poster. Jag vill helst inte ha utdata genereras för varje rad uppdateringen. Jag skulle vilja få produktionen när alla uppdateringar är klar .... Jag undrade om jag kunde ändra filen på plats med hjälp sed ... Jag gjorde försök att leta efter detta på plats alternativet .. men jag dont har GNU version av SED ... Alla tankar ...? Tack V |
|
||||
|
Här är de första flytta på dina krav:
>> 1. Generera en del slumptal av en fast längd. i \u003d 00000000 echo $ RANDOM $ i | cut-c 1-8 ovan tjänar till att generera slumptal för mer än 50 miljoner poster, återigen osäker på hur ofta ett antal upprepar! inte klart om andra krav. vara specifika snälla ... -Ilan |
|
||||
|
Hej Ilan,
Tack för att du tar upp detta ... Jag har den första kommit fram till ... Jag kan generera ett slumptal hjälp av en liten perl skript som jag hämtat från nätet ... men jag har ett problem med den andra delen ... Jag ska försöka beskriva det bättre. Jag har 50 miljoner poster med 2 kolumner. Både kolumner förekommer i alla register. Steg 1: Skapa ett slumpmässigt värde (detta är den del jag räknat ut ovan) Steg 2: Leta upp en slumpmässig titelinformation bland de 50 miljoner Steg 3: Sätt värdet i andra kolumnen med det värde som genereras i steg 1. Step4: Gå tillbaka till Steg 1, skapa ett nytt värde, leta efter en annan slumpmässigt spela in, ersätta det med detta värde och så vidare i ungefär en miljon gånger. Jag vill kunna göra detta på plats eftersom varje gång jag ut ett register med hjälp av awk ger det hela 50 miljoner inklusive den förändringen som produktion och jag har omdirigera produktion till en annan fil, döp om den till det ursprungliga och börja om igen för nästa iteration. Vad jag behöver är ett sätt att redigera filen finns i en slinga identifiera slumpmässiga poster och ändra andra kolumnen en miljon gånger. Den höga krav: Eftersom en fil med 50 miljoner poster, jag har för att skapa en fil som har 50 miljoner poster, men har 1 miljoner poster vars andra kolumnen varierar från att i första akten. Kanske finns det ett enklare sätt att göra detta ... Men jag är stumped just nu .... Tack, V |
|
||||
|
12123 | 12345678
42142 | 23442253 52315 | 32250205 .... .... ... .... .... ca 50 miljoner Nu vill jag slumpmässigt välja poster och ändra värdet på den andra kolumnen Till exempel om jag väljer det andra titelinformation slumpmässigt. Jag kommer att förändra den 2: a kolumnen till ett slumpmässigt värde: 12123 | 12345678 42142 | 53988989 52315 | 32250205 .... .... ... .... .... samma operation 1 miljon gånger varje gång välja en annan post på måfå. |
|
||||
|
Jag försökte följande kod i aix i ksh
koden är lång men det finns inget medan etc. Låt säga att den ursprungliga filen origfile steg 1. sed s /"|"/" "/ g origfile> tempfile / ** Om du inte har sed måste du ändra "|" med tomt med något * / / efter den ursprungliga filen ser ut så här 12123 12345678 * / grep-n "^ $" tempfile> origfile, rm tempfile / * efter den ursprungliga filen ser ut så här; 1 12123 12345678 2 42142 53988989 steg 2. / ** producera 1 miljon slumptal och spara till RandNumbersFile ** / steg 3. / ** producera 1 miljon slumptal och spara till RandRecordsFile ** / sortera-u RandRecordsFile> tempfile mv tempfile RandRecordsFile / * Du kan producera 1 miljon nummer men om du sorterar det unically det kan vara mindre än 1 miljon. Du måste vara säker på att varje rad i detta ärende är unikt ovanstående kommando arrangerar denna * / låt "NeededLine \u003d 1000000 -" wc-l RandRecordsFile | awk '(print $ 1)' "" / * här raden visar hur många nya rekord behöver du efter typ * / counter \u003d 0 medan [$ counter-lt $ NeededLine] göra / ** producera slumpmässigt RandomRecord (betyder slumptal). jag menar måste du lägga din kod här ** / grep $ RandomRecord RandomRecordsFile> / dev / null om [$? -ne 0] sedan echo $ RandomRecord>> RandomRecordsFile låt "counter \u003d $ counter +1" fi gjord sortera-u RandomRecordsFile> tempfile klistra tempfile RandNumbersFile> RandomRecordsFile rm tempfile / ** Efter din RandomRecordsFile ser ut så här; 1 12345678 27 53988989 första en står för titelinformation num och andra rundom fältet (orig andra fält) ** / gå-v1 origfile RandomRecordsFile> tempfile / ** omatchade rader ** / gå-o 1.1,1.2,2.2 origfile RandomRecordsFile>> tempfile / * matchade rader * / sortera-u tempfile> origfile / * sortera på field1 * / / ** om du behöver lägga till dessa rader cut-f2, f3 origfile> tempfile sed s / ""/"|"/ g tempfile> origfile ** / rm tempfile så koden; / ** producera 1 miljon slumptal och spara till RandNumbersFile ** / / ** producera 1 miljon slumptal och spara till RandRecordsFile ** / cp yourfile origfile sed s /"|"/" "/ g origfile> tempfile grep-n "^ $" tempfile> origfile sortera-u RandRecordsFile> tempfile mv tempfile RandRecordsFile låt "NeededLine \u003d 1000000 -" wc-l RandRecordsFile | awk '(print $ 1)' "" medan [$ counter-lt $ NeededLine] göra / ** producera slumpmässigt RandomRecord (betyder slumptal). jag menar måste du lägga din kod här ** / grep $ RandomRecord RandomRecordsFile> / dev / null om [$? -ne 0] sedan echo $ RandomRecord>> RandomRecordsFile låt "counter \u003d $ counter +1" fi gjord sortera-u RandomRecordsFile> tempfile klistra tempfile RandNumbersFile> RandomRecordsFile gå-v1 origfile RandomRecordsFile> tempfile gå-o 1.1,1.2,2.2 origfile RandomRecordsFile sortera-u tempfile> origfile rm tempfile Senast redigerad av fazliturk; 09-03-2007 vid 09:41.. |