Jak używać Awk do drukowania pól i kolumn w pliku
W tej części naszej serii poleceń Linux Awk przyjrzymy się jednej z najważniejszych funkcji Awk, czyli edycji pól.
Warto wiedzieć, że Awk automatycznie dzieli dostarczone mu linie wejściowe na pola, a pole można zdefiniować jako zbiór znaków oddzielonych od pozostałych pól wewnętrznym separatorem pól.
Jeśli znasz Unix/Linux lub programujesz w powłoce bash, powinieneś wiedzieć, czym jest zmienna wewnętrznego separatora pól (IFS). Domyślnym IFS w Awk są tabulator i spacja.
Oto jak koncepcja separacji pól działa w Awk: kiedy napotyka linię wejściową, zgodnie z definicją IFS, pierwszym zestawem znaków jest pole pierwsze, do którego dostęp można uzyskać za pomocą $1<, drugi zestaw znaków to pole drugie, do którego dostęp można uzyskać za pomocą $2, trzeci zestaw znaków to pole trzecie, do którego dostęp można uzyskać za pomocą $3 i tak dalej aż do ostatniego zestawu znaków.
Aby lepiej zrozumieć edycję pola Awk, spójrzmy na poniższe przykłady:
Przykład 1: Utworzyłem plik tekstowy o nazwie tecmintinfo.txt.
vi tecmintinfo.txt
cat tecmintinfo.txt
Następnie z wiersza poleceń próbuję wydrukować pola pierwsze, drugie i trzecie z pliku tecmintinfo.txt za pomocą poniższego polecenia:
$ awk '//{print $1 $2 $3 }' tecmintinfo.txt
TecMint.comisthe
Z powyższych danych wynika, że znaki z pierwszych trzech pól są drukowane w oparciu o zdefiniowany IFS, którym jest spacja:
- Dostęp do pierwszego pola, czyli „TecMint.com ”, można uzyskać za pomocą
$1
. - Dostęp do drugiego pola, które jest „jest”, można uzyskać za pomocą
$2
. - Dostęp do trzeciego pola, czyli „”, można uzyskać za pomocą
$3
.
Jeśli zauważyłeś na wydruku, wartości pól nie są oddzielone i tak domyślnie zachowuje się print.
Aby wyraźnie wyświetlić dane wyjściowe ze spacją pomiędzy wartościami pól, należy dodać operator (,)
w następujący sposób:
$ awk '//{print $1, $2, $3; }' tecmintinfo.txt
TecMint.com is the
Należy pamiętać i zawsze pamiętać, że użycie ($)
w Awk różni się od jego użycia w skryptach powłoki.
Skrypty powłoki ($)
służą do uzyskiwania dostępu do wartości zmiennych, podczas gdy w Awk ($)
są używane tylko podczas uzyskiwania dostępu do zawartości pole, ale nie w celu uzyskania dostępu do wartości zmiennych.
Przykład 2: Przyjrzyjmy się jeszcze jednemu przykładowi z użyciem pliku zawierającego wiele wierszy o nazwie my_shoping.list.
No Item_Name Unit_Price Quantity Price
1 Mouse #20,000 1 #20,000
2 Monitor #500,000 1 #500,000
3 RAM_Chips #150,000 2 #300,000
4 Ethernet_Cables #30,000 4 #120,000
Załóżmy, że chcesz wydrukować tylko Cena_jednostkowa
każdego przedmiotu na liście zakupów, musisz uruchomić poniższe polecenie:
$ awk '//{print $2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Awk ma także polecenie printf
, które pomaga w sformatowaniu danych wyjściowych. Jest to dobry sposób, ponieważ jak widzisz powyższe dane wyjściowe nie są wystarczająco jasne.
Użycie printf
do sformatowania wyników Item_Name i Unit_Price:
$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt
Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000
Streszczenie
Edycja pól jest bardzo ważna, gdy używasz Awk do filtrowania tekstu lub ciągów znaków, pomaga uzyskać określone dane w kolumnach na liście. I zawsze pamiętaj, że użycie operatora ($)
w Awk różni się od tego w skryptach powłoki.
Mam nadzieję, że artykuł był dla Ciebie pomocny. Jeśli potrzebujesz dodatkowych informacji lub masz pytania, możesz zamieścić komentarz w sekcji komentarzy.