Witam. Mam taki problem - probuje wczytaj z pliku linijke i ja zapisac wyniki do zmiennych:
cat file | read ONE TWO THREE; echo $ONE;
to nie wypisuje nic na ekran, a chcialbym zeby te zmienne ONE, TWO, THREE zostaly wypelnione danymi, poniewaz pozniej je wykorzystuje do porownan itp. Plik zawiera jedna linijke z 3 wartosciami oddzielonymi spacjami, Jak to zrobic?
Analogicznie:
echo "jaamba" | read NAME; echo $NAME; nie wypisuje nic, a chcialbym zeby wypisalo "jaamba"
Pozdrawiam.
[mysz@urzenia ~]% read ONE
a
[mysz@urzenia ~]% echo $ONE
a
[mysz@urzenia ~]% echo 'b' |read ONE
[mysz@urzenia ~]% echo $ONE
b
[mysz@urzenia ~]% echo Q W E > /tmp/a
[mysz@urzenia ~]% cat /tmp/a
Q W E
[mysz@urzenia ~]% cat /tmp/a | read ONE TWO THREE
[mysz@urzenia ~]% echo $ONE
Q
[mysz@urzenia ~]% echo $TWO
W
[mysz@urzenia ~]% echo $THREE
E
[mysz@urzenia ~]%
SOA#1 ?
EDIT:
Khm, jakby coś to testowałem na zsh, w bashu rzeczywiście nie działa ;)
Wydaje mi sie ze to ma cos wspolnego z tym ze | (pipe) w bashu tworzy podproces basha, i te zmienne sa ustawiane tylko w tym zagniezdzinym bashu, a na zewnatrz, czyli poziom wyzej, nie sa widziane. No ale nie jestem pewien i nie wiem jak temu zaradzic, ale dzieki za odpowiedz.
- nie
echo "jaamba" | read NAME; echo $NAME;
tylkoNAME=
echo "jaamba"; echo $NAME;
- awk nie gryzie a nawet przydac sie moze
one=`awk '(NR == 1) {print $1}' file`
two=`awk '(NR == 1) {print $2}' file`
three=`awk '(NR == 1) {print $3}' file`
echo $one
echo $two
echo $three
- tak sie nie da wczytac za latwo do wiecej niz jednej zmiennej, musialbym bawic sie wycinaniem strngu po spacjach
- nie znam awk, na wszystko bedzie czas. dzieki za ten kod
pozdrawiam
awk fajna rzecz. Bywa zakręcony, ale przy jego pomocy z plikami tekstowymi zrobisz wszystko.
$ cat plik
ala ma kota
kot ma
ale
$ while read A B C;do echo "A = '$A' B = '$B' C = '$C'";done < plik
A = 'ala' B = 'ma' C = 'kota'
A = 'kot' B = 'ma' C = ''
A = 'ale' B = '' C = ''
A = '' B = '' C = ''
$ read A B C < plik; echo "A = '$A' B = '$B' C = '$C'"
A = 'ala' B = 'ma' C = 'kota'
$
działa w bashu (specjalnie zsh opuściłem dla testu)
cat w myszowym przykładzie jest zbędny, bo read może czytać od razu z pliku (jak to niektórzy mawiają: nie męczmy kota)
ten przykład z awk jest brzydki, bo dla każdej zmiennej rusza plik i to w nowym procesie
hej
dzieki za przyklad, jest tylko jedno ale - te zmienne sa widziale w obrebie petli while, a ja chce zrobic cos innego, i w tym przypadku nie zadziala. ogolnie:
- ustaw zmienne na puste stringi
- sprawdz czy taki a taki plik istnieje
3 jesli istnieje, to wczytaj linijke do zmiennych - dalej sobie wykorzystuj te zmienne
dzieki
[browar] do zobaczenia w TG na kurczaku ;]