Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Jest taka sytuacja, w skrypcie test.sh tworzę sobie zmienną
TEST="$1"
która jest pobierana jako argument skryptu.
Mam plik test, w którym mam następujące dane:
AAA|Tom
AAA|Kris
BBB|Tony
Skrypt wywołuję jako test.sh AAA i chciałbym aby na wyjściu pokazały mi się wiersze, gdzi ena pierwszym miejscu są litery AAA
czyli tworzę pętlę:
TEST="$1" for NAME in `cat test | (awk -F "|" '{if (index($1, "$TEST")) print $2}')` do echo "${HOST}" done
Niestety po wywołaniu skryptu, mam pusty ekran jak w awk podstawie bezpośrednio wpis AAA zamiast $TEST to skrypt ładnie tworzy wynik. Co robię nie tak
Pozdrawiam
Offline
1. To nie ma prawa działać, bo w pętli deklarujesz zmienną NAME a odwołujesz się do zmiennej HOST. Musisz się zdecydować.
2. To nie ma prawa działać, ponieważ w awk treść skryptu otaczasz pojedynczym cudzysłowem, co znaczy że powłoka w ogóle nie interpretuje tego fragmentu kodu. Przekazuje go od razu do awk, bez podstawienia w miejsce $TEST wartości zmiennej.
3. Masz dwa wyjścia:
a)
for NAME in $(cat test | (awk -F "|" '{if (index($1, "'$TEST'")) print $2}'))
(zwróć uwagę na pojedyncze i podwójne cudzysłowy)
b)
for NAME in $(cat test | (awk -v TEST="$TEST" -F "|" '{if (index($1, TEST)) print $2}')) # albo -v TEST="$1", jeżeli ta zmienna nigdzie indziej nie jest Ci potrzeba
A tak na marginesie, mnożysz koty:
for NAME in $(awk -F "|" '{if (index($1, "'$TEST'")) print $2}' test)
Offline
Podziękował, dużo pracy przede mną
Offline