Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Michal Švarc 07. 01. 2015, 05:48:40
-
Pokud jde o konzoli, vpodstatě si vypíšu seznam řádků podle nichž by se měl soubor rozsekat.
grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'
Zjistím kolik řádků soubor má:
wc -l DB*.sql | awk '{print $1}'
A začnu rozsekávat (např):
head -n $((6466-2)) *sql | tail -n $((6466-6439+1)) > tabulka.sql
Rád bych si to ale převedl do scriptu, který by tu práci dělal za mě.
Pojmenování souborů:
grep -n 'Table structure for table' DB*.sql | awk '{print $6}' | tr -d "\`"
Rád bych pochopil, jakým způsobem mohu toto převést do shellového scriptu.
Tak nějak si představuji, že bych začátek souboru, seznam řádků a poslední řádek, načetl do pole. Názvy souborů do druhého pole, a pak patrně pomocí while prováděl ořez.
Jen mi zatím není jasné jak to provést.
mělo by fungovat cca toto
RADKY=(`ls`)
bude to ale fungovat i s rourou?
tedy
RADKY=(`grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'`)
a co teprv přidávání více záznamů (tohle asi fungovat nebude, že?)
RADKY=(0 `grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'` `wc -l DB*.sql | awk '{print $1}'`)
zatím jsem to nezkoušel a pročítám fóra
-
Tak tohle, minimálně v konzoli funguje...
RADKY=('0' `grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'` `wc -l DB*.sql | awk '{print $1}'`)
-
Na to není bash,grep,wc,head ani tail potřeba, to zvládne awk sám ;)
awk 'match($0,/^-- Table structure for table `([^`]+)`/,a){tabname=a[1] ".sql"};tabname {print > tabname}' DB*.sql
-
Vytlac to, rozstrihaj a spatne oskenuj do samostatnych suborov.
-
cat <<EOF > tst.txt
1
2
3
4
5
EOF
for radek in 1 3;do tail -n +$radek tst.txt | head -n 2;done
akorat dopocitat spravne pocty radku pro head
-
Rekl bych, ze asi nejdulezitejsi pro tebe bude vedet, jak si ulozit vysledek prikazu do promenne. Dela se to prostrednictvim uzavreni do dolarovych zavorek: $(.) nebo drive pouzivane `.`. Napriklad:
$ L=$(ls)
$ echo $L
-
:o ... Petře díky, něco takového jsem prostě nečekal ... myslím že si na noc vezmu man awk, přesně to jsem potřeboval - teď už jen pochopit jak to funguje
a díky i ostatním za snahu
-
Hmmm, nevim na co, ale i tak....
https://gist.github.com/jasny/1608062 (https://gist.github.com/jasny/1608062)
variant prehrsel....
-
csplit - split a file into sections determined by context lines