Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Marcos.MM 29 Dubna 2009, 17:40:18

Název: Skript na rozdělení souboru (slovníku) [vyřešeno]
Přispěvatel: Marcos.MM 29 Dubna 2009, 17:40:18
Zdravím,
potřeboval bych prosím Vás pomoct s následujícím problémem. Jde mi o to napsat skript, který mi rozdělí soubor (slovník) na části. Znám příkazy split, csplit apod. Ale pokud vím, těmi dokážu ten slovník rozdělit jen dle velikosti. Slovník má např. 10 mb, tak split jej rozdělí dle definované velikosti. Ale nedokáže jej rozdělit jen s tím parametrem, že jej chci třeba na tři části bez toho, abych musel zjišťovat velikost slovníku. Něco málo v bashi jsem dělal, ale až tak moc do toho nevidím. Díky za případné rady či nápady.
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Numirah 29 Dubna 2009, 21:13:06
Ak ti ide iba o delenie podľa veľkosti, spočítal by som si ju:
Kód: [Vybrat]
velkost=`find /cesta/k/suboru/slovnik.xxx -printf %s`
echo $velkost
vydelil troma
Kód: [Vybrat]
deleno=$((${velkost} / 3)) a potom by som to predal splitu, alebo čomu už budeš chcieť.

Samozrejme cestu k súboru (ak sa mení) a na koľko častí to rozdeliť môžeš načítavať z pozičných ppremenných ($1 alebo $@) nemusí to byť "natvrdo" v scripte.

edit :
až teraz som si všimol: "bez toho, abych musel zjišťovat velikost slovníku."
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Marcos.MM 29 Dubna 2009, 21:30:17
Mno pokud to takto půjde, tak není potřeba dodržet to, abych nemusel zjišťovat velikost. Díky, vyzkouším.  ;)

Edit: Děkuji mnohokrát, a kdyby to někoho zajímalo, tady je výsledný skript. Neříkám, že je profi, ale funguje.

#!/bin/bash
echo "Zadejte plnou cestu k souboru:"
read cesta
echo "Zadejte počet rozdělení:"
read pocet
velikost=`find $cesta -printf %s`
deleno=$((${velikost} / $pocet))
echo "Soubor $cesta o velikosti $velikost bajtů bude rozdělen.."
echo "..na $pocet části o velikosti $deleno bajtů..."
split -d -b $deleno $cesta
echo "Hotovo."
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Numirah 30 Dubna 2009, 07:12:15
Samozrejme cestu k súboru (ak sa mení) a na koľko častí to rozdeliť môžeš načítavať z pozičných ppremenných ($1 alebo $@) nemusí to byť "natvrdo" v scripte.

#!/bin/bash

velikost=`find $1 -printf %s`
deleno=$((${velikost} / $2))
echo "Soubor $1 o velikosti $velikost bajtů bude rozdělen.."
echo "..na $2 části o velikosti $deleno bajtů..."
split -d -b $deleno $1
echo "Hotovo."
exit 0

spusti script
Kód: [Vybrat]
rozdel /cesta/k/suboru/slovnik.xxx 3
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: petergula 30 Dubna 2009, 08:34:55
To numirah:
Citace
velikost=`find $1 -printf %s`
nemalo by tam byt skor nieco ako:
Kód: [Vybrat]
velikost=`find . -iname $1 -printf %s`, aby find hladal velkost suboru s danym menom v aktualnom adresari.
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Numirah 30 Dubna 2009, 14:51:38
 >> petergula
mohlo by byť, ale keďže zadávaš celú cestu k jednému konkrétnemu súboru nieje to treba
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: nettezzaumana 30 Dubna 2009, 16:43:50
Citace
#!/bin/bash

if test $# -ne 2; then
        echo "gimme two parameteres, path to file(1) and decided parts(2)";
        exit;
fi

if test ! -f "$1"; then
        echo "bad file ..";
        exit;
fi

velikost=`du -k "$1" | sed 's/\s\+.*//'`;
velikost_casti=$(($velikost / $2 + $velikost % $2));

echo "soubor bude rozdelen na $2 casti o velikosti $velikost_casti""Kb";

split --bytes=$velikost_casti\K "$1" $1.

Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Numirah 30 Dubna 2009, 20:56:31
poprípade ma napadá ešte tretia podmienka
Kód: [Vybrat]
if ! [[ "$2" =~ ^[0-9]+$ ]] ; then
    echo "druhy parameter nieje cislo"
    exit
fi
Název: Re: Skript na rozdělení souboru (slovníku)
Přispěvatel: Marcos.MM 03 Května 2009, 22:22:07
Vážně všem děkuji za rady. Nějak jsem si z toho splácal potřebný skript.  ;)