nagy fájl szerkesztése

Fórumok

egy 720MByte-os szöveg fájlt kéne megszerkesztenem, és kifogot az Open Officon. A gép Core2Duo 4G mem és nem lehet megnyitni sem. Mivel lehet egy ekkora fájlt szerkeszteni?

Hozzászólások

Milyen szerkesztési műveletre gondolsz? Sima szövegfájl?

És ahhoz, hogy mit kell kopizni, látnod kell a fájl tartalmát, vagy esetleg tudsz róla a megnyitás nélkül is valamit (sorszám, valamilyen minta)? Ha az előbbi, akkor esetleg a split-tel felszabdalhatod kisebb, kezelhetőbb darabokra.

Egyébként mi ez, a Háború és béke 500-szor? :-)

"Milyen adat?"

Egy adatbázis exportálva cvs-be, és UTF8 kódolással. Aki kirakta fájlba, nem csinált egy selectet, hanem úgy egyben kinyomta az egészet sorbarendezve. Kéne belőle pár száz sor. 720MByte a fájl mérete

A vi -persze használható, de itt a Copy-Paste nem megy. Valami GUI-s editor kéne hozzá. Ha lenne a gépen Win, akkor notepad pont jó lenne, de most sajnos nincs.

ha vim mellett döntesz akkor néhány tipp:
ha visualmódba nagy 'V'-vel mész akkor egész sorokat jelöl ki
ha pl. 50 sort lejebb akarsz mozogni: '50j' (felfelé 'k')
kereséssel is mozoghatsz: '/' és gépeld be a kifejezést (regexp), majd enterre az első találatra ugrik, 'n' következő, 'N' előző
ha pedig kiadod a :set incsearch parancsot akkor kereséskor ('/'), már gépelés közben az első találatra ugrik

több fájl szerkesztése
:e fájlnév megnyit egy új fájlt
a megnyitott fájlok (bufferek) listáját :ls paranccsal lehet lekérni a listában van sorszámuk
:b3 paranccsal a 3. bufferra lehet ugrani

tehát egyik fájlból a másikba másolás:
:e fájl1
pl. a fentebb leírt módszerrel (visualmode + y) szöveg kijelölése és másolása
:e fájl2
'p'-vel beillesztés

`tail` es `head` kombinaciojaval ciklusban szepen haladhacc ^_^


FILE="testextt."
LINE_NUM=`cat "$FILE" | wc -l`
SLEEP=2
for i in `seq 0 $(($LINE_NUM / 20))`; do head -n $((20*$i)) "$FILE" | tail -n 20; sleep $SLEEP; done

de grep-el megtudod hanyadik sor aztan head-el es tail-el csak a megadott szakasz iratod ki...


FILE="test.text"
REGEXP="kifejezes"
cat -n $FILE | grep "$REGEXP"

es igy toabb... Vagy irsz ra egy programot, hogy szepen mutassa vegig a file-t soronkent... ^_^

esetleg...

`split`


FILE="test.text"
split -l 100 "$FILE"

es akor letrehoz egy rakat file-t mindegyikben csak 100 sor lesz ^_^ nagy file-nal erdemesebb kulon konyvtarban csinalni, mert sok kis file lesz...

Sok sikert... emelem eleg fegyvert adtam...
--
by lightgod

Én a vim-mel megpróbálkoznék... (ha amúgy ismerted).

Vagy ha felismerhető valahogy az eleje és vége a kívánt résznek, sed-del kikapnám a nagy kupac közepéről.

Pl. ha egy fájlban (biblia.txt) megvan a teljes Biblia és a "{Máté|Márk} evangéliuma" szöveg csak mint fejezetcím fordul elő, akkor ez a parancs:

sed -n "/Máté evangéliuma/,/Márk evangéliuma/ p" biblia.txt > kimenet.txt

a két minta közti részt, azaz Máté evangéliumát (és Márk evangéliuma fejezetcímét, de ez könnyen levágható utólag) írja ki az egészből, amit betesz a kimenet.txt-be.

Remélem, ez segít.

Ha egy másik fájlba kell részeket átmásolni akkor more-al vagy less-el (kinek mi a kedvence) lehet olvasni szépen a nagy fájlt, a megfelelő részeket pedig egérkével átrángatni az új fájlba...

1. Az awk erre való.

2. Ha meg kicsit bonyolultabb, akkor Pathologically Eclectic Rubbish Lister -> Perl (-n kapcsoló, .. és ... operátorok stb.).

3. Ha csak egszer kell megcsinálni, és a file egy szakaszára van szükséged, akkor split-tel szétvágni, és a megfelelő részeket editálni. Naná, hogy vi-val :))