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