Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Podela fajla na vise delova

[es] :: Skript jezici :: Podela fajla na vise delova

[ Pregleda: 55325 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

lega99

Član broj: 82119
Poruke: 674



Profil

icon Podela fajla na vise delova02.09.2015. u 13:56 - pre 39 meseci
Sortiran fajl pokusao sam da podelim na osnovu prvog slova na vise fajlova.
Nasao sam neke primere, prilagodio ali skripta delimicno promasuje na nekim slovima.
Uzeo sam i sa cat spojio sve te fajlove koje sam dobio i razlika u odnosu na originalni fajl bila je oko 800MB.
Isortirao sam tako spojeni fajl i uporedio sa originalnim, dobio razliku i video da za neka
pocetna slova skripta ne radi kako treba.
Izdvajao sam ovako:
Code:
#!/bin/sh
awk '
  /^a/ { 
    printf ("%.135s\n",$0) > "mala-a.txt"
  } 
  /^b/ {
    printf ("%.135s\n",$0) > "mala-b.txt"
  }
  /^c/ {
    printf ("%.135s\n",$0) > "mala-c.txt"
  }
  /^d/ {
    printf ("%.135s\n",$0) > "mala-d.txt"
  }
  /^e/ {
    printf ("%.135s\n",$0) > "mala-e.txt"
  }
  /^f/ {
    printf ("%.135s\n",$0) > "mala-f.txt"
  }
  /^g/ {
    printf ("%.135s\n",$0) > "mala-g.txt"
  }
  /^h/ {
    printf ("%.135s\n",$0) > "mala-h.txt"
  }
  /^i/ {
    printf ("%.135s\n",$0) > "mala-i.txt"
  }
  /^j/ {
    printf ("%.135s\n",$0) > "mala-j.txt"
  }
  /^k/ {
    printf ("%.135s\n",$0) > "mala-k.txt"
  }
  /^l/ {
    printf ("%.135s\n",$0) > "mala-l.txt"
  }
  /^m/ {
    printf ("%.135s\n",$0) > "mala-m.txt"
  }
  /^n/ {
    printf ("%.135s\n",$0) > "mala-n.txt"
  }
  /^o/ {
    printf ("%.135s\n",$0) > "mala-o.txt"
  }
  /^p/ {
    printf ("%.135s\n",$0) > "mala-p.txt"
  }
  /^q/ {
    printf ("%.135s\n",$0) > "mala-q.txt"
  }
  /^r/ {
    printf ("%.135s\n",$0) > "mala-r.txt"
  }
  /^s/ {
    printf ("%.135s\n",$0) > "mala-s.txt"
  }
  /^t/ {
    printf ("%.135s\n",$0) > "mala-t.txt"
  }
  /^u/ {
    printf ("%.135s\n",$0) > "mala-u.txt"
  }
  /^v/ {
    printf ("%.135s\n",$0) > "mala-v.txt"
  }
  /^w/ {
    printf ("%.135s\n",$0) > "mala-w.txt"
  }
  /^x/ {
    printf ("%.135s\n",$0) > "mala-x.txt"
  }
  /^y/ {
    printf ("%.135s\n",$0) > "mala-y.txt"
  }
  /^z/ {
    printf ("%.135s\n",$0) > "mala-z.txt"
  }
' malaslova.txt
exit


Uporedjivao ovako:
Code:
sort file1 file2 | uniq -u > file3

 
Odgovor na temu

uranium
Beograd

Član broj: 60097
Poruke: 543
46.240.242.*

Jabber: uranium@elitesecurity.org
ICQ: 324386953


Profil

icon Re: Podela fajla na vise delova02.09.2015. u 17:46 - pre 39 meseci
Pod pretpostavkom da radiš samo sa ASCII znacima, probaj sledeće:


perl -ne 'print unless /^[a-z]/' malaslova.txt > skipped.txt


Ako je dobijeni fajl veličine veće od 0, misterija je rešena (ulazni fajl ima redove koji ne počinju malim slovom i to je ujedno i razlika).

Takođe, ne vidim zašto odstranjuješ duplikate pri poređenju (ako duplikata ima u izlaznim fajlovima, mora ih biti i u ulaznom fajlu - jer se od zadatih uslova oblika /^[a-z]/ u awk skripti uvek izvršava najviše 1).
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
 
Odgovor na temu

lega99

Član broj: 82119
Poruke: 674



Profil

icon Re: Podela fajla na vise delova02.09.2015. u 20:59 - pre 39 meseci
Citat:
uranium: Pod pretpostavkom da radiš samo sa ASCII znacima, probaj sledeće:


perl -ne 'print unless /^[a-z]/' malaslova.txt > skipped.txt


Ako je dobijeni fajl veličine veće od 0, misterija je rešena (ulazni fajl ima redove koji ne počinju malim slovom i to je ujedno i razlika).

Takođe, ne vidim zašto odstranjuješ duplikate pri poređenju (ako duplikata ima u izlaznim fajlovima, mora ih biti i u ulaznom fajlu - jer se od zadatih uslova oblika /^[a-z]/ u awk skripti uvek izvršava najviše 1).



Sa ovim upordjujem prvobitni fajl i novonastali fajl koji sam dobio spajanjem izlaznih fajlova

Code:
sort file1 file2 | uniq -u > file3

Ovo je provereno i dobije se razlika dva fajla kao pravi fajl a ne kao ona klasika za uporedjivanje dva fajla gde u fajlu pisu komentari.
Listao sam file3 nema velikih slova ima neke slogove koji pocinju sa . -i [ ali gro slogova pocinju sa k r q, znaci iz nekog razloga preskoci
neke slogove sa tim slovima, iskljucivo su ASCII znakovi i to samo printabilni.
 
Odgovor na temu

uranium
Beograd

Član broj: 60097
Poruke: 543
46.240.242.*

Jabber: uranium@elitesecurity.org
ICQ: 324386953


Profil

icon Re: Podela fajla na vise delova02.09.2015. u 21:28 - pre 39 meseci
Ne vidim ništa pogrešno u samoj skripti i mislim da je jedini problem u načinu na koji testiraš.
Skripta odseca prvih 135 karaktera iz svake linije ulaznog fajla (malaslova.txt).

Kada pokušavaš da nađeš "razliku" fajla dobijenog spojanjem svih mala-*.txt fajlova (file1) i malaslova.txt (file2), ti zapravo konkateniras file1 i file2, sortiraš ih i odstraniš duplikate (pretpostavljam da je ideja da ako file3 bude jednak sortiranom malaslova.txt da je onda skripta uspešno odradila).
Međutim, ako file2 ima linije duže od 135 znakova, onda će one svakako biti jedinstvene (jer im u file1 korespondiraju linije od najviše 135 znakova).
Tako da si faktički napravio fajl koji sadrži sve originalne linije, plus prefixe (dužine najviše 135) tih istih linija.
Za poređenje sortiranih fajlova najbolje je koristiti komandu comm (pogledati man comm za detalje).

Inače, to što file3 ima linija koje ne počinju sa malim slovom je dovoljan razlog da proveriš da li takvih linija ima i u malaslova.txt (moralo bi da ih bude).
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
 
Odgovor na temu

lega99

Član broj: 82119
Poruke: 674



Profil

icon Re: Podela fajla na vise delova02.09.2015. u 22:30 - pre 39 meseci
Fajl nema sigurno liniju duzu od 135 karaktera jer sam to jos odavno odradio i max duzina je 50.
Skripta radi jako sporo, lutao sam po netu i nasao to sto hocu isto sa awk ali dovoljna samo komada u jednom redu
i radi mnogo brze. Nasao sam resenje i dobio sam fajlove sa sadrzajem prvog karaktera . - [ . U tim fajlovima (. - [) prebrojao sam
slogove, prebrojao sam slogove u ulaznom fajlu, probrojao slogove u izlaznim fajlovima i sad je sve ok, sve je na broju.
Ove nevaljasne (. - [) sam odbacio sto mi je bio krajnji cilj.
Code:

awk '{f="mala." substr($0,1,1)); print substr($0,1,135)>f}' malaslova.txt
 
Odgovor na temu

lega99

Član broj: 82119
Poruke: 674



Profil

icon Re: Podela fajla na vise delova03.09.2015. u 10:41 - pre 39 meseci
Zaboravio sam da pojasnim ono oko sort-a.
Ulaz u sort file1 je izvorni fajl, file2 je fajl koji je dobijen spajanjem izlaznih fajlova iz one skripte, file3 je upravo razlika
file1 file2 (linije-slogovi koji koji nisu dupli i to kao upotrebljiv fajl).
To oko odsecanja ja koristim prepisivacku skolu i logiku, ne znam tacno sta bi se desilo kad bi to izbacio jer mi nije potrebno
i da li bi mi onda sve radilo kako treba. Uglavnom u prethodnom postu onakva awk komada daje rezultat, dobio sam fajl
podeljen na delove po prvom slovu i ujedno izbacio nevaljasne delove, takodjer to mnogo brze radi. Malo su nazivi izlaznih fajlova
debilni mala.a mama.b itd... ali posle uradim rename. Problem resen, hvala na pomoci
 
Odgovor na temu

uranium
Beograd

Član broj: 60097
Poruke: 543
46.240.242.*

Jabber: uranium@elitesecurity.org
ICQ: 324386953


Profil

icon Re: Podela fajla na vise delova03.09.2015. u 12:18 - pre 39 meseci
Super. Nema na čemu. Koliko vidim, ovo poslednje rešenje zapravo uzima prvi karakter svake linije i razvrstava po njemu - bilo da je taj karakter malo ili veliko slovo ili bilo koji znak
I zapravo nešto slično i piše u prvoj rečenici tvog prvog posta, ali sam ja gledajući skriptu - pomislio da zapravo juriš samo mala slova (od znaka 'a' do znaka 'z') - dok zapravo juriš bilo koji znak sad je sve jasno
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
 
Odgovor na temu

[es] :: Skript jezici :: Podela fajla na vise delova

[ Pregleda: 55325 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.