Portál AbcLinuxu, 12. května 2025 18:24

Dotaz: BASH: jak načíst hodnoty z jednoho řádku do pole

3.5.2011 09:13 kyekros | skóre: 17 | Pardubice
BASH: jak načíst hodnoty z jednoho řádku do pole
Přečteno: 430×
Odpovědět | Admin
Dobrý den, s bashem jsem kdysi dávno pracoval, ale nikdy ne ve spojitosti s nějakým souborem. Potřeboval bych kapku popostrčit. Mám rozsáhlý soubor s mnoha řádky. V každém řádku je mnoho hodnot oddělených tabelátorem a já bych tyto hodnoty "vždy pouze z jednoho řádku" potřeboval načíst do pole a po projití smyčky, aby se načetli hodnoty z následujícího řádku. Můžete mě prosím někdo kapku popostrčit. Předem děkuji za každou pomoc.

Řešení dotazu:


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

Odpovědi

3.5.2011 09:30 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
while read radek; do eval pole=('$radek'); ...echo ${pole[3]} ... ; done < soubor
Řešení 1× (maleprase)
3.5.2011 10:08 ams
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
while read -a pole ; do .... ; done < soubor
3.5.2011 10:25 kyekros | skóre: 17 | Pardubice
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
Děkuji všem za pomoc. Již jsem se posunul téměř do finále. Jenže mám ještě jeden malinkatý problém. Některé hodnoty oddělené tabulátorem jsou prázdné. Prostě v nich není žádný znak. Takže jsou ignorovány a několik tabulátorů vedle sebe je bráno jako jeden. Asi nejjednodušším řešením by bylo nahradit tyto prázdné hodnoty nějakým znakem. Jenže nějak ne netu nemohu najít nějaký zástupný znak pro tabulátor, takže je nemohu automaticky nahradit. Pracuji v aplikaci gedit. Nevíte ještě jak na to? Jak nahradit TabTab třeba řetězcem Tab#Tab. Třeba i v jiném programu. Ještě jednou díky.
3.5.2011 10:52 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole

Mozno by to slo aj takto s presmerovanim do noveho subory a teda zachovanim povodneho:

sed 's/\([\t]\)\([\t]\)/\1#\2/g' < subor > novy_subor

alebo interaktivne pomocou prepinaca -i v sede, ked sa upravuje zdrojovy subor:

sed -i  's/\([\t]\)\([\t]\)/\1#\2/g' < subor

 

Otazne je vsak aj to, co si predstavujes pod prazdnym znakom :) Medzera, NULL ...? Akokolvek, ak je tam daky znak, tak ho dopln medzi \([t]\)PRAZDNY_ZNAK\([t]\) a malo by to fungovat.

3.5.2011 11:02 kyekros | skóre: 17 | Pardubice
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Mezi dvěma tabelátory nic není. Jsou prostě dva vedle sebe.
3.5.2011 12:15 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole

Tak potom jednoducho aplikuj ten prikaz v sede na ten tvoj subor. Je to nastavene tak, ako to opisujes.

3.5.2011 12:25 kyekros | skóre: 17 | Pardubice
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Moc děkuji a prosím tě jakým příkazem ještě nahradím v sed všechny mezery v dokumentu tabelátorem?
3.5.2011 12:29 kyekros | skóre: 17 | Pardubice
Rozbalit Rozbalit vše Re: BASH: jak načíst hodnoty z jednoho řádku do pole
Už to mám. :)

sed 's/ /\t/g'

Díky všem strašně moc.

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.