Nowe posty

Autor Wątek: warunki w petli for x in  (Przeczytany 2155 razy)

slawekdw

  • Gość
warunki w petli for x in
« dnia: 2010-12-22, 15:32:57 »
Witam
Czy jest jakis sposób na wykonanie funkcii IF else w petli for ?
mam plik z danymi w formacie
22333 werwwe ssss@ssss

za pomocą funkcji wc zliczam ilosc wierszy zmienne $ile
deklaruje zmienna sekw=$(seq $ile)
następnie uruchamiam pętle
for i in $sekw
do
pobieram z pierwszego wiersza pierwszej kolumny dane do zmiennej:
x=$(awk '{if (NR== '$i') print $1}' /plikz danymi)
przeszukuje katalog w ktorym znajduje sie plik zawierajacy w nazwie dane ze zmiennej x:
plik=$(find /katalog/z/plikami -exec grep -l $x {} \\;)

i teraz potrzebny jest warunek, ze jezeli plik zostal znaleziony to wykonaj instrukcje, jezeli nie to wroc do petli na nastepna pozycje
probowalem
if [ -f $plik ];
then

instrukcje

else

echo "brak pliku, powrot do petli
fi done

ale nie dziala, pomija warunek i przelatuje caly skrypt
prosze o pomoc

arctgx

  • Gość
warunki w petli for x in
« Odpowiedź #1 dnia: 2010-12-23, 00:30:19 »
Możliwe, że find znajduje za każdym razem zero lub więcej niż jeden plik.

Chyba niepotrzebnie pokomplikowałeś to rozwiązanie. Żeby przeczytać wszystkie pierwsze pola pliku ze spacją jako separatorem wystarczą wewnętrzne polecenia read i while:
while read x reszta 
do
    while read plik
    do
        [[ -f "$plik" ]] && echo zrób coś z $plik || echo brak zwykłego pliku $plik
    done < <(grep -lr $x /katalog)
done < plik_z_danymi
Wewnętrzna pętla while czyta sobie po jednym pliku. Przekierowanie na jej końcu może nie działać w innych powłokach niż bash.