Javier Palacios Bermejo Yazar hakk�nda: Javier �spanya'daki bir �niversitenin Astronomi b�l�m�nde Prof. Dr. olarak �al��maktad�r. G�revi bir i� istasyonu grubunu �al��t�rmakt�r. �� yerinde g�nl�k i�lerinin tamam� Unix makineler �zerinde yap�lmaktad�r. Evvelki baz� problemlerinden ve deneyimlerinden �t�r� slackware Linux'u kullanmay� tercih etti. Linux, di�er markal� Unix sistemlerinden �ok daha iyi hale geldi. ��erik: |
�zet:
Bu makale AWK ile yapabilece�iniz hileler hakk�nda size baz� bilgiler
vermektedir. Bu bir ders niteli�inde olmayacak ancak, size kullanabilece�iniz
canl� �rnekler verecektir.
Ger�ekte, bu fikir LinuxFocus dergisindeki Guido Socher taraf�ndan yaz�lm�� bir �ift yaz�y� okuduktan sonra akl�ma geldi. Bunlardan biri, komutlar� bulmak ve anlatmak ile ilgili, bu bana g�sterdi ki komut sat�r�n� kullanan tek ki�i de�ilim. �o�unlukla k���k GUI'ler baz� �eylerin nas�l yap�ld���n� tam olarak s�ylemezler (bu y�ntem nedeniyle Windows y�llar �nce gitti). Di�er yaz�n�n konusu kurall� deyimlerdi. Her ne kadar bu yaz�da kurall� deyimlere sadece �ok az de�inilmi�se de awk'dan ve sed ve grep gibi di�er komutlardan da tam verim alabilmek i�in bunlar� bilmeniz gerekmektedir.
Anahtar soru awk'n�n ger�ekten kullan��l� bir komut olup olmad���d�r. Cevap kesinlikle evetdir! Normal bir kullan�c� i�in text dosyalar�n� �al��t�rabilmek yararl� olabilir, yeniden format atmak, vb...Ancak bir sistem y�neticisi i�in AWK son derece �nemli bir hizmettir. /var/yp/Makefile civar�nda dolan�n ya da �nceki yaz�lara bak�n. AWK her yerde kullan�l�r.
Awk hakk�nda genel bilgi
Benim AWK hakk�ndaki ilk yaz�m, bunu unutmama yetecek kadar eskidir.
K���k bir Cray'den ger�ekten b�y�k baz� ��kt�lar alarak �al��mak isteyen
bir meslekta��m var. awk i�in Cray'deki ayr�nt�l� bilgiler b�l�m�
ger�ekten k���k, ancak o, her ne kadar nas�l kullanaca��n� tam olarak anlam��
olmasa da AWK'�n arad��� �eye �ok benzedi�ini s�yledi.
Uzun bir zaman sonra, yeniden beraberiz, ba�ka bir yerde tesad�fi bir
ba�lang��, ba�ka bir meslekta��m AWK'y� kullanarak ilk s�tunu tablodan
geni�letmi�ti:
|
Bir zamanlar bir derste s�tunlar� geni�leterek dosyalar�n ad�n� de�i�tirme
gibi baz� �eyleri yapabilece�imizi ��renmi�tik:
ls -1 pattern | awk '{print "mv "$1" "$1".new"}' | sh
... ve daha fazlas�. �nceki �rnekte sed veya grep'i bir arada kullanmak bize daha g��l� ara� sa�lam��t�r.
Her ne kadar awk-command ismini kullanacak olsak da, awk asl�nda bir �e�it komut ismi de�ildir. awk, C ile uyu�an bir �ok s�zdizisine sahip bir programlama dilidir. Bir aray�z dilidir ve awk aray�z� (interpreter) verilen bilgileri i�ler.
Buyru�un kendisi ile ilgili:
# gawk --help Usage: gawk [POSIX or GNU style options] -f progfile [--] file ... gawk [POSIX or GNU style options] [--] 'program' file ... POSIX options: GNU long options: -f progfile --file=progfile -F fs --field-separator=fs -v var=val --assign=var=val -m[fr] val -W compat --compat -W copyleft --copyleft -W copyright --copyright -W help --help -W lint --lint -W lint-old --lint-old -W posix --posix -W re-interval --re-interval -W source=program-text --source=program-text -W traditional --traditional -W usage --usage -W version --version Buglar� Cc: [email protected] ile [email protected] adresine bildirin,Buyruk sat�r�nda programlar� sadece (') kesme ile ay�raca��m�za, bunlar� bir dosyaya yazabiliriz, ve onu -f se�ene�i ile �a��rabiliriz, ayr�ca yazd���m�z programa baz� �ok iyi bilinen de�i�kenleri ekleyebilmek i�in buyruk sat�r�nda -v var=val buyru�unu kullan�r�z.
Awk, zor ��renilen ve tablolar� y�netmeye yap�land�r�lm�� bir dildir. Yani, i�erideki bir alanda gruplanabilen ve kaydedilebilen baz� bilgiler. Buradaki avantaj, kaydedilebilen bilgilerin (ve ayn� zamanda alan�n) olduk�a esnek olmas�d�r.
Awk olduk�a g��l�d�r. Bir sat�rl�k kay�tla �al��mas� i�in tasarlanm��t�r,
fakat bu nokta biraz gev�ek olabilir. Benzerliklerin baz�lar�n� g�rebilmek
i�in, baz� ders verici (ve ger�ek) �rneklere g�z ataca��z.
BEGIN { printf "LaTeX preample" printf "\\begin{tabular}{|c|c|...|c|}" } |
{ printf $1" & " printf $2" & " . . . printf $n" \\\\ " printf "\\hline" } |
END { print "\\end{document}" } |
SIMBAD di�er �eyler aras�nda astronomiksel nesnelerin veritaban�d�r, g�ky�z� �zerinde bir ba�lang�� konumu belirler. Ge�mi�te bir keresinde baz� nesnelerin �evresinde haritalar �izebilmeye gerek duydum. Aray�z, sonu�lar� metin dosyalar�nda kaydetmeyi sa�lar, ve bu konuda iki yakla��m�m vard�: her nesne i�in bir dosya yaratmak, ya da onu tam bir girdi listesiyle beslemek, ben awk'� b�y�k ��kt� k�t�klerini par�alara ay�rmak i�in kullan�yorum. A��k�a, baz� ��kt� karakterlerinden avantaja gereksinimim vard�.
====> name : nlines <==== Birinci ba�l�k bize yeni bir nesne ba�lad���n� bildirir ve d�rd�nc� ise nesnenin ne kadar giri�e sahip oldu�unu g�sterir (buna ra�men veri �ok fazla gerekli de�ildir.) |
( $1 == "====>" ) { NomObj = $2 TotObj = $4 if ( TotObj > 0 ) { FS = "|" for ( cont=0 ; cont<TotObj ; cont++ ) { getline print $2 $4 $5 $3 >> NomObj } FS = " " } } |
NOT: Asl�nda, nesne ad� geri g�nderilmedi, ve o biraz daha karma��kt�, ancak bu ders niteli�indeki bir �rnek olarak verilmi�tir. |
BEGIN { BEGIN_MSG = "From" BEGIN_BDY = "Precedence:" MAIN_KEY = "Subject:" VALIDATION = "[MONTH REPORT]" HEAD = "NO"; BODY = "NO"; PRINT="NO" OUT_FILE = "Month_Reports" } { if ( $1 == BEGIN_MSG ) { HEAD = "YES"; BODY = "NO"; PRINT="NO" } if ( $1 == MAIN_KEY ) { if ( $2 == VALIDATION ) { PRINT = "YES" $1 = ""; $2 = "" print "\n\n"$0"\n" > OUT_FILE } } if ( $1 == BEGIN_BDY ) { getline if ( $0 == "" ) { HEAD = "NO"; BODY = "YES" } else { HEAD = "NO"; BODY = "NO"; PRINT="NO" } } if ( BODY == "YES" && PRINT == "YES" ) { print $0 >> OUT_FILE } } |
Belki bir posta listesini y�netiyor olabiliriz ve
zaman zaman, baz� �zel mesajlar (�rne�in, ayl�k raporlar) �zel bir bi�imde
('[MONTH REPORT] month , dept' gibi konularla) listeye eklenebilir. Aniden,
y�l�n sonunda b�t�n bu mesajlar� di�erlerinin yan�na kaydederek bir araya
getirmeyi tasarlar�z.
Bu, posta d�ng�s�n� soldaki programdaki awk ile birlikte �al��t�r�rsak olabilir. Ki�isel bir dosyada yaz�lan raporlar�n her birini biraraya getirmek demek, fazlal�k �� tane d�zg� sat�r� demektir. |
NOT: Bu �rne�in tahmin etti�im gibi posta d�ng�s�n� yap�land�rd��� kabul edildi. Asl�nda ger�ek bi�imi bilmiyorum, ama bu program benim tesisat�mda �al��maktad�r (tabi yine baz� ilgin� durumlarda �al��mayabilir). |
awk'� ba�ka bir �ok taslak i�in kulland�m (basit bir veritaban�ndan
al�nan bilgilerle bir a� sayfas�n� otomatik olarak meydana getirme) ve
awk programlamas� hakk�nda bir �ok �eyin yap�labilece�ine emin olacak kadar
�ok �ey biliyorum.
Sadece hayal g�c�n�z� u�u�a b�rak�n.
Ve, function anahtar s�zc��� ile kullan�c�n�n belirli fonksiyonlar�
kullanabilmesi ve bir girdi dosya sat�r�n� �al��t�r�yormu� gibi
birle�ik buyruklar� yazabilmesi elbette m�mk�nd�r. �l��lm�� ortak de�erlerden
farkl� olarak, awk'�n dizilerin boyutlar�n� belirleyebilme gibi bir �zelli�i
de vard�r.
AWK kurulma ama�lar� i�in olduk�a uygundur: Veriyi sat�r sat�r okuyun ve sat�rlardaki s�z dizilerine ve kal�plara kadar devam edin.
/etc/password gibi dosyalar yeniden bi�imlendirme ve AWK ile �al��t�rma i�in idealdir. AWK bu gibi g�revler i�in paha bi�ilmezdir.
Tabi AWK yaln�z de�ildir. Perl g��l� bir rakiptir fakat yine de birka�
AWK hilesi ��renmeye de�er.
Bu
sanal y�renin bak�m� LinuxFocus yaz�m gurubu taraf�ndan yap�lmaktad�r
� Javier Palacios Bermejo LinuxFocus 1999 |
�eviri bilgileri:
|