Rozsekání souboru ve skriptu

Rozsekání souboru ve skriptu
« kdy: 07. 01. 2015, 05:48:40 »
Pokud jde o konzoli, vpodstatě si vypíšu seznam řádků podle nichž by se měl soubor rozsekat.
Kód: [Vybrat]
grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'
Zjistím kolik řádků soubor má:
Kód: [Vybrat]
wc -l DB*.sql | awk '{print $1}'
A začnu rozsekávat (např):
Kód: [Vybrat]
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ů:
Kód: [Vybrat]
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
Kód: [Vybrat]
RADKY=(`ls`)bude to ale fungovat i s rourou?
tedy
Kód: [Vybrat]
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?)
Kód: [Vybrat]
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
« Poslední změna: 07. 01. 2015, 15:54:50 od Petr Krčmář »


Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #1 kdy: 07. 01. 2015, 06:28:34 »
Tak tohle, minimálně v konzoli funguje...
Kód: [Vybrat]
RADKY=('0' `grep -n 'Table structure for table' DB*.sql | awk -F :-- '{print $1}'` `wc -l DB*.sql | awk '{print $1}'`)

Petr

Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #2 kdy: 07. 01. 2015, 07:21:02 »
Na to není bash,grep,wc,head ani tail potřeba, to zvládne awk sám ;)

Kód: [Vybrat]
awk 'match($0,/^-- Table structure for table `([^`]+)`/,a){tabname=a[1] ".sql"};tabname {print > tabname}' DB*.sql

Juro

Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #3 kdy: 07. 01. 2015, 07:47:39 »
Vytlac to, rozstrihaj a spatne oskenuj do samostatnych suborov.

jenda

Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #4 kdy: 07. 01. 2015, 10:31:24 »
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


ddd

Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #5 kdy: 07. 01. 2015, 10:47:29 »
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



Re:Rozsekání souboru (Bash, konzole, shellové scripty)
« Odpověď #6 kdy: 07. 01. 2015, 14:58:35 »
 :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




and

Re:Rozsekání souboru ve skriptu
« Odpověď #7 kdy: 07. 01. 2015, 19:25:46 »
Hmmm, nevim na co, ale i tak....

https://gist.github.com/jasny/1608062
variant prehrsel....

BzF

Re:Rozsekání souboru ve skriptu
« Odpověď #8 kdy: 07. 01. 2015, 21:52:59 »
csplit - split a file into sections determined by context lines