bash - skrypt zabawa z plikiem

Potrzebujesz pomocy z C, C++, perl, python, itp.
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

[+] bash - skrypt zabawa z plikiem

Post autor: sethiel »

Mam plik spis:

Kod: Zaznacz cały

cat ./spis
jeden,123,123,jeden
piec,dwa,dwa,dwa,dwa,dwa
oko,trzy,1
szyja,
szafa,555,5555,555
Chciałbym uzyskać efekt (póki co) wyświetlenia na ekranie[INDENT]jeden
jeden,123,123,jeden
tralala[/INDENT][INDENT]pięć
pięć,dwa,dwa,dwa,dwa,dwa
tralala[/INDENT][INDENT]oko
oko,trzy,1
tralala[/INDENT]i tak dalej przez wszystkie linijki w pliku.

Usiłuję to zrobić na dwa sposoby ale coś mi nie wychodzi:

Kod: Zaznacz cały

for param in $(cat ./spis); do
    odcinek=echo $param
    tekst=echo $param | awk -F "," '{print $1}'
    echo "$odcinek"
    echo "$tekst"
    echo "tralala"
done

for param in $(cat ./spis); do
    odcinek=echo $param
    tekst=$(echo $param | exec cut -d ',' -f1)
    echo "$odcinek"
    echo "$tekst"
    echo "tralala"
done
piter
Beginner
Posty: 128
Rejestracja: 09 lutego 2008, 12:45

Post autor: piter »

Kod: Zaznacz cały

for param in $(cat ./spis); do
        odcinek=$param
        tekst=`echo $param | awk -F "," '{print $1}'`
        echo $tekst
        echo $odcinek
        echo tralala
        echo
done
Zajrzyj tu:
http://bash.0x1fff.com/zmienne-programowe
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

A po co tak kombinować?

Kod: Zaznacz cały

awk -F',' '{print $1"\n"$0"\ntralala\n"}' spis
I to

Kod: Zaznacz cały

for param in $(cat ./spis); do
jest naprawdę paskudne ;)
sethiel
Junior Member
Posty: 762
Rejestracja: 28 stycznia 2008, 11:50
Lokalizacja: Wrocław

Post autor: sethiel »

Dzięki.
Jeszcze w tak zwanym międzyczasie znalazłem, że właśnie bardzo nieładnie używać for, tylko powinno się używać while.
Pewnie jak ktoś dłużej pisze skrypty to wie dlaczego.
A jako, że musiałem puścić spam sam do siebie przedwczoraj w nocy to wyszło jeszcze inaczej:

Kod: Zaznacz cały

while read line
    do
    linijka="`echo -e "$line\n"`"
    adres="`echo $linijka | awk -F "," '{print $1}'`"
    wiadomosc="`cat ./postponed`"
    echo -e "$wiadomosc\n$linijka MB\n\nPozdrawiam\n"  | msmtp --host=smtp-domena.ogicom.pl --port=587 -f test@domena.pl $adres
    #echo "adres: $adres"
    #echo "tralala"
    done < ./sp
ODPOWIEDZ