Wyszukiwanie w witrynie

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:

  1. Dostęp do pierwszego pola, czyli „TecMint.com ”, można uzyskać za pomocą $1.
  2. Dostęp do drugiego pola, które jest „jest”, można uzyskać za pomocą $2.
  3. 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.