Portál AbcLinuxu, 10. května 2025 16:45

Dotaz: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu

23.7.2015 15:58 Lucius
Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
Přečteno: 293×
Odpovědět | Admin
Ahoj, chtel jsem se zeptat, zda nekdo poradi, jak vyresit/osetrit situaci, kdy: chci poustet paralene mujskript.sh, ktery si jako 2 dynamicky promenne vezme z kazdeho radku az dokonce prvni a druhy sloupec a udela nejaky vystup. Nechci to poustet seriove, protoze to trva docela dlouho a je mozne, ze seznam.txt bude obsahovat cca 50-100 radku, mujscript.sh udela svoji logiku za pomoci techto dvou promennych a vytvori nejaky vystupni soubor. Ted mi jde o to udelat takovy cyklus, ktery to projede od shora dolu spolu s paralelnim spustenim mujscript.sh Diky

Neco ve smyslu:
mujscript.sh
prvni=`cat seznam.txt |awk -F";" '{print $1}'`
druhy=`cat seznam.txt |awk -F";" '{print $2}'`
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.7.2015 16:52 Sten
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A potřebuje to jako dvě oddělené proměnné? Kdyby to třeba mohl načítat po řádcích on-the-fly:
while IFS=';' read prvni druhy; do
    …
done <seznam.txt
24.7.2015 09:27 Lucius
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
Takhle to vyhovuje, ale jak to mam udelat, aby si ten skript vzal prvni radek, vystartoval proces, zacala se provadet logika, ve stejny cas si vzal druhy radek, vystartoval se dalsi paralelni proces, atd. az na konec souboru? Diky
AraxoN avatar 24.7.2015 09:41 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
Obecne keď sa nemá čakať na skončenie vykonávania, stačí za príkaz dať &. Takto sa dá spustiť viacero procesov paralelne. Ak sa v nejakom bode má počkať až takto spustené procesy skončia, použije sa príkaz wait:
#!/bin/sh
echo "dobru noc"
sleep 1 &
sleep 2 &
sleep 3 &
wait
echo "dobre rano"

time ./test.sh
dobru noc
dobre rano

real    0m3.015s
user    0m0.000s
sys     0m0.000s
Tzn. sleep 1, 2 a 3 sa rozbehli paralelne a potom sa počkalo kým skončia - t.j. 3 sekundy, nie 6 ako by to bolo pri postupnom vykonávaní.
24.7.2015 11:05 Lucius
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
A ted jak to udelat v kontextu cyklu? Takhle?

while IFS=';' read prvni druhy; do
   echo $prvni
   echo $druhy
done < seznam.txt &
wait
echo "ALL DONE"
24.7.2015 13:24 partizann
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu

while IFS=';' read prvni druhy; do

echo $prvni &

echo $druhy &

done < seznam.txt

wait

echo "ALL DONE"

pripadne ak sa ma prvni a druhy vykonat po sebe:

while IFS=';' read prvni druhy; do

$(echo $prvni ;echo $druhy) &

done < seznam.txt

wait

echo "ALL DONE"

24.7.2015 15:24 Lucius
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
A da se to udelat tak, ze cyklus si udelam jako funkci
ahoj(){
while IFS=';' read prvni druhy; do
echo $prvni 
echo $druhy 
done < seznam.txt
echo "ALL DONE"
}
a v hlavni casti pak udelam:
ahoj &
wait
echo "ALL DONE"
? Dik
24.7.2015 20:23 chrono
Rozbalit Rozbalit vše Re: Paraleni spusteni skriptu a cyklus pro grepnuti kazdeho radku ze seznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možno by sa dal použiť GNU Parallel a niečo ako
parallel --eta --colsep ";" --arg-file seznam.txt mujscript {1} {2}

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.