Portál AbcLinuxu, 10. května 2025 07:58

Dotaz: Jak rozdelim v bash $line z read line do dvou argumentu??

10.9.2011 10:02 jeleniste | skóre: 13 | blog: Prokustovo lože
Jak rozdelim v bash $line z read line do dvou argumentu??
Přečteno: 368×
Odpovědět | Admin
Sory, za zacatecnickej dotaz, nejsem s bash moc familiární a nejsem si jistej, co presne bych mel guglit. Mam nasledujici problem, mam v textaku dva sloupce (oddeleny mezerou, ale muzu to precedit sedem apod) a chci vyrobit skript, kterej veme kazdej radek a pusti nejaky prikazy, kde budou ty dva sloupce jako argumenty (jedno je nazev databaze, druhy cast nazvu schematu, ale to je fuk) propracoval sem se s pomoci guglu k tomuhle
while read line; do
bash vytvor_vfk_karto.sh $line $2
echo $line
done < schemata.conf
na a ja bych prave potreboval, aby se to line rozdelilo na dve pulky, tj neco jako:
while read line; do
echo $prvni_pulka_lajny
echo ----------------------------------
echo $druha_pulka_lajny
done < nejaky_lajny
de to nejak jednoduse udelat bez sedu, awk a rozdeleni do vice souboru (jeden se smyckou, druhej s tim obsahem a treti s tema lajnama)???
Ja predpokladam, ze na to musi bejt nejaky uplne jednoduchy reseni, ale sem, co se tyce shellu uplnej matlak.
Dikec Jelen
P.S.: Neni to domaci ukol, nebo tak neco.
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

10.9.2011 10:26 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak ten sed/awk se da pustit i na samostatny radek, ale na tohle by stacil i cut:
while read line; do
  ONE=$(cut -d' ' -f1 <<< $line)
  TWO=$(cut -d' ' -f2 <<< $line)
  echo $ONE : $TWO
done < schemata.conf
Nebo se da vyuzit regularnich vyrazu zabudovanych v bashi:
while read line; do
  if [[ $line =~ (.*)\ (.*) ]]; then
    ONE=${BASH_REMATCH[1]}
    TWO=${BASH_REMATCH[2]}
    echo $ONE : $TWO
  fi
done < schemata.conf
Jenom bacha, pokud je v tom radku vic mezer, prvni priklad zabere na prvni mezeru, druhy na posledni.
There is no point in being so cool in a cold world.
10.9.2011 10:30 Kit
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Odpovědět | | Sbalit | Link | Blokovat | Admin
while read prvni_slovo zbytek_lajny; do
  echo $prvni_slovo
  echo $zbytek_lajny
done < schemata.conf
10.9.2011 11:31 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Jo, tohle je presne to, co sem hledal. Diky moc. Jelen
Nejsem blbý, jen se hloupě ptám
10.9.2011 10:53 jekub
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Odpovědět | | Sbalit | Link | Blokovat | Admin
function f {
        echo $1
        echo $2
}

while read line; do
        f $line
done < schemata.conf
Řešení 1× (jeleniste (tazatel))
10.9.2011 11:13 Kit
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě takový doplněk: Většinou není nutné žádný cyklus dělat a předhodit to rovnou AWK, který má ten cyklus vestavěný a proto je výrazně rychlejší. Je fakt, že v tomto případě by použití AWK bylo asi jako kanón na vrabce.
awk '{system("prikaz " $1 " " $2)}' < schemata.conf
10.9.2011 11:26 jeleniste | skóre: 13 | blog: Prokustovo lože
Rozbalit Rozbalit vše Re: Jak rozdelim v bash $line z read line do dvou argumentu??
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky všem.
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.