Wyszukiwanie w witrynie

Jak zezwolić Awk na używanie zmiennych powłoki — część 11


Kiedy piszemy skrypty powłoki, zwykle dołączamy do nich inne mniejsze programy lub polecenia, takie jak operacje Awk. W przypadku Awk musimy znaleźć sposób przekazania pewnych wartości z powłoki do operacji Awk.

Można to zrobić, używając zmiennych powłoki w poleceniach Awk, a w tej części serii dowiemy się, jak pozwolić Awk na używanie zmiennych powłoki, które mogą zawierać wartości, które chcemy przekazać do poleceń Awk.

Istnieją prawdopodobnie dwa sposoby umożliwienia Awk używania zmiennych powłoki:

1. Korzystanie z wyceny Shell

Przyjrzyjmy się przykładowi ilustrującemu, w jaki sposób można faktycznie użyć cudzysłowu powłoki w celu zastąpienia wartości zmiennej powłoki w poleceniu Awk. W tym przykładzie chcemy wyszukać nazwę użytkownika w pliku /etc/passwd, przefiltrować i wydrukować informacje o koncie użytkownika.

Możemy zatem napisać skrypt test.sh o następującej treści:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

Następnie zapisz plik i wyjdź.

Interpretacja polecenia Awk w powyższym skrypcie test.sh:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ " – cytowanie powłoki używane do zastępowania wartości zmiennej powłoki nazwa użytkownika w poleceniu Awk. Wartością nazwa użytkownika jest wzorzec do przeszukania w pliku /etc/passwd.

Zwróć uwagę, że podwójny cudzysłów znajduje się poza skryptem Awk, „{ print $0 }”.

Następnie uczyń skrypt wykonywalnym i uruchom go w następujący sposób:

chmod  +x  test.sh
./text.sh 

Po uruchomieniu skryptu zostaniesz poproszony o wprowadzenie nazwy użytkownika, wpisz prawidłową nazwę użytkownika i naciśnij Enter. Szczegóły konta użytkownika zobaczysz w pliku /etc/passwd jak poniżej:

2. Korzystanie z przypisania zmiennych w Awk

Metoda ta jest znacznie prostsza i lepsza w porównaniu do metody pierwszej opisanej powyżej. Biorąc pod uwagę powyższy przykład, możemy uruchomić proste polecenie, aby wykonać zadanie. W tej metodzie używamy opcji -v, aby przypisać zmienną powłoki do zmiennej Awk.

Najpierw utwórz zmienną powłoki nazwa użytkownika i przypisz jej nazwę, którą chcemy przeszukać w pliku /etc/passwd:

username="aaronkilik"

Następnie wpisz poniższe polecenie i naciśnij Enter:

cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Wyjaśnienie powyższego polecenia:

  1. -v – Opcja Awk umożliwiająca zadeklarowanie zmiennej
  2. nazwa użytkownika – jest zmienną powłoki
  3. name – jest zmienną Awk

Przyjrzyjmy się uważnie $0 ~ name wewnątrz skryptu Awk, ' $0 ~ name {print $0}'. Pamiętaj, że kiedy omawialiśmy operatory porównania Awk w części 4 tej serii, jednym z operatorów porównania był wzorzec wartości ~, co oznacza: prawda, jeśli wartość pasuje do wzorca.

wyjście ($0) polecenia cat przekazane do Awk pasuje do wzorca (aaronkilik), czyli nazwy, której szukamy w /etc/passwd w rezultacie operacja porównania jest prawdziwa. Następnie na ekranie drukowana jest linia zawierająca informacje o koncie użytkownika.

Wniosek

Omówiliśmy ważną sekcję funkcji Awk, która może pomóc nam w użyciu zmiennych powłoki w poleceniach Awk. Często będziesz pisać małe programy lub polecenia Awk w skryptach powłoki i dlatego musisz dobrze rozumieć, jak używać zmiennych powłoki w poleceniach Awk.

W następnej części serii Awk zajmiemy się jeszcze jedną krytyczną sekcją funkcji Awk, czyli instrukcjami kontroli przepływu. Bądźcie zatem na bieżąco i uczmy się dalej oraz dzielmy się informacjami.