Portál AbcLinuxu, 14. května 2025 03:10

Dotaz: vlozenie riadku do textu

19.9.2008 15:56 Peter Farbiak
vlozenie riadku do textu
Přečteno: 388×
Odpovědět | Admin
Dobry den. Potreboval by som poradit. Mam textovy subor v takomto tvare

a

b

c

e

f

a medzi riadok obsahujuci text "c" a riadok obsahujuci text "e" chcem vlozit riadok s textom "d". Mozete mi poradit ako na to v awk alebo perle?

Dakujem
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.9.2008 15:59 Peter Farbiak
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zabudol som spomenut, ze ide o velke textove subory s velkostou do 15MB, takze podmienkou je aby bolo riesenie rychle. Spravil som to pomocou sedu,avsak ten bol pomaly,kedze som musel pouzit parametre P a D.
Fuky avatar 19.9.2008 20:27 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: vlozenie riadku do textu

Na 250MB soubor:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
ccccccccccccccccccccccccccccccccccccccccccccccccccc
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
fffffffffffffffffffffffffffffffffffffffffffffffffff

Jsem poslal:

$ time cat in |sed 's/\(ccccccccccccccccccccccccccccccccccccccccccccccccccc\)/\1\nddd/' > out

A nepřijde mi to zas tak moc pomalé:

real    0m26.187s
user    0m14.973s
sys     0m5.016s

15MB zmákne za 1.5s, potřebuješ to ještě rychleji? (CPU 2.40GHz, cache 128 KB, rychlost disku 55.68 MB/sec)

20.9.2008 10:38 Peter Farbiak
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
zle som to vysvetlil.moja chyba.dajme tomu,ze ten subor vyzera takto

a

b

c

e

a

b

c

f

a ak za sebou nasleduju riadky "c" a po nom riadok "e",tak medzi ne dopln riadok "d". V pripade,ze za riadkom "c" nasleduje nieco ine nepridaj medzi ne nic.

Dufam,ze teraz je to uz vysvetlene spravne.
Fuky avatar 20.9.2008 12:25 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: vlozenie riadku do textu

V tom případě:

/^PrvniRadek$/ {
    N
    s/DruhyRadek$/VlozenyRadek\nDruhyRadek/
}

7.10.2008 13:44 Franta Hanzlík
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
Příloha:
Pro zajímavost jsem zkusil porovnat rychlost zpracování při použití perlu, awku a sedu. Vstupní soubory s velikostí cca 15MB s různými délkami řádek (2,4,8,16,32,64,128,256 znaků vč. LF), řádky s posloupností písmen "abcebcf" podle zadání. Testoval jsem na dvou různě výkonných strojích, scripty a výsledky viz příloha, ve stručnosti:
  • čím kratší jsou řádky (tj. na stejnou velikost souboru je jich v něm více) tím je zpracování delší.
  • na krátkých řádkách o jednom znaku je awk cca 2x rychlejší než perl a sed cca 3x rychlejší než perl.
  • soubor s řádky o délce 7 znaků je v perlu zpracován cca 4x rychleji než soubor s řádky o L=1, awk má zhryba stejnou rychlost zpracování jako perl, a sed je proti nim stále 2-3x rychlejší.
  • soubor s řádky o délce 63 znaků awk zpracuje cca 2x pomaleji než perl, sed je oproti perlu cca 2x rychlejší.
  • na souborech s dlouhými řádky (255 znaků) je perl cca 4-5x rychlejší než awk, sed je rychlejší jen o pár desitek procent rychlejší než perl.
17.10.2008 09:25 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
Díky za hodnotné srovnání. Hold co se týká zpracování textu v linuxu, je sed nejlepší volbou :-) Pokud bychom neměli řádky o délce >255 znaků, tam se to asi bude postupně otáčet ve prospěch perlu.
19.9.2008 23:01 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
Odpovědět | | Sbalit | Link | Blokovat | Admin
ed subor <<EOF
/c/
a
d
.
wq
EOF
If you hold a Unix shell up to your ear, you can you hear the C.
22.9.2008 10:28 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:
Řešení v perlu by mohlo být třeba následující, viz příloha.
benchmark:
1) 17MiB soubor:
real    0m6.656s
user    0m5.680s
sys     0m0.108s
2) 256MiB soubor:
real    1m34.719s
user    1m26.397s
sys     0m1.100s
pc je core2duo 2GHz, 1GB ram
6.10.2008 17:46 Peter Farbiak
Rozbalit Rozbalit vše Re: vlozenie riadku do textu
to je presne ono.dakujem pekne

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.