Portál AbcLinuxu, 26. dubna 2024 15:42


Dotaz: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu

14.5.2011 15:52 jeleniste | skóre: 13 | blog: Prokustovo lože
Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Přečteno: 314×
Odpovědět | Admin
Mám následující problém, mám nějaký skript v awk, který třídí řádky do několika souborů. Akorát kódování je blbý a já bysem to rád pořídil s minimem ukládání na disk (je to velký).
skript.sh < iconv -f ISO-8859-2 -t UTF-8 vstupnifajl
nefunnguje
iconv -f ISO-8859-2 -t UTF-8 vstupnifajl>skript.sh
taky ne v tom awku je neco jako
/patern/{.....;print $0 > "slozka/"file}..
nesel by ten iconv nejak narvat do toho??? Dik Jelen
Nejsem blbý, jen se hloupě ptám

Řešení dotazu:


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

Odpovědi

Jakub Lucký avatar 14.5.2011 15:57 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
a nejde to protáhnout přes stdin/stdout ?

iconv -f ISO-8859-2 -t UTF-8 vstupni | awk -f awkskript.awk

If you understand, things are just as they are; if you do not understand, things are just as they are.
14.5.2011 16:06 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
a
iconv ... | ./skript.sh
taky nedela co by mel..
Nejsem blbý, jen se hloupě ptám
14.5.2011 18:54 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Jejda, tak tenhle dělá, co má dělat, zdá se.. Jsem si to před tim omylem přepsal, proto to nefungovalo. Díky a sory Jelen
Nejsem blbý, jen se hloupě ptám
Jakub Lucký avatar 14.5.2011 18:56 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Tohle pochopitelně fungovat nebude, protože bashovský skript v defaultu nečte ze stdinu...

Pokud je ten skript čisté AWK, pak to lze udělat tak jak jsem psal (spuštěním AWK interpretu a načtením skriptu do něj), pokud je to opravdu bash skript, pak bude potřeba ho upravit, aby četl stdin. Po řádkách lze celou věc udělat takto:
#!/bin/bash
IFS=`echo` #jinak se vám budou místo řádků dělit věci po mezerách...
while read radek;do 
#odteď je v proměnné $radek uložen jeden řádek. S tím lze dále operovat
echo $radek 
done #zakončení bloku while
If you understand, things are just as they are; if you do not understand, things are just as they are.
14.5.2011 19:05 Kit
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Takové konstrukci je lepší se v shellu vyhnout, protože je pomalá. Vždy je dobré se zamyslet, zda by místo cyklu šla použít nějaká funkce.
Jakub Lucký avatar 14.5.2011 19:20 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
jo, to je pravda... Nějaký konkrétní návrh, jak v Bashi načítat stdin?
If you understand, things are just as they are; if you do not understand, things are just as they are.
15.5.2011 12:51 Kit
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Jesli se nepletu, tak problém je již vyřešen. Přesto odpovím.

Bash je shell, je tedy určen především k volání jiných programů. V daném případě bylo jen potřeba spojit rourou programy iconv a awk. Cykly zůstaly uvnitř volaných programů, u kterých můžeme předpokládat, že jsou optimalizované. Rozhodně je toto řešení rychlejší, než cyklus v shellu.
Jakub Lucký avatar 15.5.2011 14:31 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Problém spočíval v něčem trochu jiném, neuvědomil jsem si, že Bash předá stdin pro skript prvnímu příkazu...
If you understand, things are just as they are; if you do not understand, things are just as they are.
15.5.2011 12:12 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
iconv .... | bash skript
funguje ve skriptu je
gawk 'BEGIN{..} 
/patern1/{print $0 >> file1}
/patern2/{print $0 >> file2}
adlib... '
Nejsem blbý, jen se hloupě ptám
15.5.2011 12:59 Kit
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Stejně dobře by měl fungovat i tento zápis:
iconv .... | gawk 'BEGIN{..} 
   /patern1/{print $0 >> file1}
   /patern2/{print $0 >> file2}
   adlib... '
Chybu jsi měl jen v tom, že jsi použil '>' (přesměrování do souboru) místo '|' (přesměrování do jiného procesu)
14.5.2011 17:30 NN
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co je v tom awk skriptu ?

NN
14.5.2011 18:42 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak použít iconv na vstupu, výstupu, případně uvnitř awkovýho skriptu
víceméně tohle akorát rozepsaný na asi 700 řádek, ono se s každym tim řádkem eště něco tropí, ale základ je tuto..
Nejsem blbý, jen se hloupě ptám

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.