Cum să utilizați Awk pentru a imprima câmpuri și coloane în fișier


În această parte a seriei noastre de comenzi Linux Awk, vom arunca o privire asupra uneia dintre cele mai importante caracteristici ale Awk, care este editarea pe teren.

Este bine de știut că Awk împarte automat liniile de intrare care îi sunt furnizate în câmpuri, iar un câmp poate fi definit ca un set de caractere care sunt separate de alte câmpuri printr-un separator de câmp intern.

Dacă sunteți familiarizat cu Unix/Linux sau faceți programare bash shell, atunci ar trebui să știți ce variabilă este separatorul de câmp intern (IFS). IFS implicit în Awk sunt tab și spațiu.

Așa funcționează ideea de separare a câmpurilor în Awk: când întâlnește o linie de intrare, conform IFS definit, primul set de caractere este câmpul unu, care este accesat folosind $1<, al doilea set de caractere este câmpul doi, care este accesat folosind $2, al treilea set de caractere este câmpul trei, care este accesat folosind $3 și așa mai departe până la ultimul set de caractere.

Pentru a înțelege mai bine această editare a câmpului Awk, să aruncăm o privire la exemplele de mai jos:

Exemplu 1: am creat un fișier text numit tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Apoi, din linia de comandă, încerc să printez câmpurile primul, al doilea și al treilea din fișierul tecmintinfo.txt folosind comanda de mai jos:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

Din rezultatul de mai sus, puteți vedea că caracterele din primele trei câmpuri sunt tipărite pe baza IFS definită, care este spațiu:

  1. Câmpul unul care este „TecMint.com ” este accesat folosind $1.
  2. Câmpul doi care este „este ” este accesat folosind $2.
  3. Câmpul trei, care este „„, este accesat folosind $3.

Dacă ați observat în rezultatul tipărit, valorile câmpului nu sunt separate și așa se comportă implicit imprimarea.

Pentru a vizualiza în mod clar rezultatul cu spațiu între valorile câmpului, trebuie să adăugați operatorul (,) după cum urmează:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Un lucru important de reținut și de reținut întotdeauna este faptul că utilizarea ($) în Awk este diferită de utilizarea sa în scripturile shell.

Sub scriptul shell ($) este folosit pentru a accesa valoarea variabilelor, în timp ce în Awk ($) este folosit numai atunci când accesați conținutul un câmp dar nu pentru accesarea valorii variabilelor.

Exemplu 2: Să aruncăm o privire la un alt exemplu folosind un fișier care conține mai multe linii numite 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		

Să presupunem că doriți să imprimați numai Unit_Price pentru fiecare articol din lista de cumpărături, va trebui să rulați comanda de mai jos:

$ 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 are, de asemenea, o comandă printf care vă ajută să formatați ieșirea este un mod frumos, deoarece puteți vedea că rezultatul de mai sus nu este suficient de clar.

Folosind printf pentru a formata ieșirea Nume_Articol și Preț_Unitate:

$ 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

rezumat

Editarea câmpurilor este foarte importantă atunci când utilizați Awk pentru a filtra text sau șiruri de caractere, vă ajută să obțineți anumite date în coloanele dintr-o listă. Și amintiți-vă întotdeauna că utilizarea operatorului ($) în Awk este diferită de cea din scriptul shell.

Sper că articolul v-a fost de ajutor și pentru orice informații suplimentare necesare sau întrebări, puteți posta un comentariu în secțiunea de comentarii.