awk-ஐ பயன்படுத்த ஆரம்பிப்பது எப்படி?
awk, sed மற்றும் grep ஆகிய மூன்றும் லினக்ஸ் அல்லது யுனிக்ஸ் கட்டளை–வரியில்(command-line) எனக்கு விருப்பமான கருவிகளாகும். இவை மூன்றும் திறன்மிகு கருவிகளாகும். எப்படி awk-ஐ உபயோகிப்பது என்று இப்போது பார்ப்போம். அதன் பிறகு சில உபயோகமான awk ஒற்றை வரி கட்டளைக் காணலாம்.
AWK உரை நடையில் உள்ள தரவுகள் அல்லது தரவுத் தொடர் பரப்புகைகளை(data streams) நிரற்படுத்துவதற்காக வடிவமைக்கப்பட்ட நிரலாக்க மொழியாகும். இது 1970-களில் பெல் ஆய்வுக்கூடத்தில் உருவாக்கப்பட்டது. பழமையான மொழி என்பதால், அதன் வயதை மட்டும் கருத்தில் கொண்டு இதை ஒதுக்கிட கூடாது. இது மிகவும் திறன்மிகுந்ததும், செயல்களை ஆற்றலுடன் செய்து முடிப்பதும் ஆகும். சரி, வாருங்கள் awk-ஐ ஒரு கை பார்க்கலாம்.
awk-ன் சிக்கலான செயல்பாடு மற்றும் பயன்பாட்டை தெரிந்து கொள்வதற்கு முன், அதன் அடிப்படையிலிருந்து ஆரம்பிப்போம். தற்போதைய பயிற்சிக்காக ஒரு கோப்பை உருவாக்கிக் கொள்வோம். நீங்கள் எந்தவொரு கோப்பையும் இந்த பயிற்சிக்கு பயன்படுத்திக் கொள்ளலாம்; அது அமைப்பிலிருக்கும் பதிவுக் கோப்பாகக் கூட இருக்கலாம். நாம் கீழே கொடுக்கப்பட்டுள்ள ‘df’ கட்டளையின் மாதிரிப் பெறுகையை(sample output) நமது பயிற்சிக்கு பயன்படுத்திக் கொள்வோம்.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 56776092 25257692 28587744 47% / /dev/sda1 101086 30293 65574 32% /boot /dev/sda4 158128684 46476484 110045700 30% /home /dev/shm 1785172 0 1785172 0% /dev/shm
இந்த மாதிரியான பெறுகைகள் awk கையாள மிகச் சிறந்தனவாகும். Tab அல்லது Space-ஆல் பிரிக்கப்பட்ட தரவுகளைப் பிரித்தெடுப்பது awk-க்கு அல்வா சாப்பிடுவது மாதிரி. அது ஏன் என்று விரைவில் உங்களுக்குப் புரியும். ‘df > test.txt’ என்ற கட்டளையை உங்கள் முனையத்தில் தட்டச்சு செய்யுங்கள் அல்லது மேலே கொடுக்கப்பட்டள்ள பெறுகையை ஒரு கோப்பில் நகலெடுத்துக் கொண்டு, அந்த கோப்பிற்கு ‘test.txt’ என்று பெயரிடுங்கள். பொதுவாக எல்லா வழங்கல்களிலும் awk இருக்கும். ஏதோ ஒரு காரணத்தினால் உங்கள் வழங்கலில் awk இல்லையென்றால் அதை முதலில் நிறுவுங்கள். முனையத்தில் பின்வரும் கட்டளையை எந்த அடைவுக்குள் ‘test.txt’ கோப்பை உருவாக்கினீர்களோ, அந்த அடைவுக்குள்ளிருந்து தட்டச்சு செய்யுங்கள்:
# awk '{print}' test.txt
பெறுகை ‘test.txt’ கோப்பிலுள்ள எல்லா வரிகளையும் அடக்கியிருக்கும். கோப்பிலுள்ள முதல் செங்குத்து வரிசையை மட்டும் தனியாக எடுக்க, கீழே உள்ள கட்டளையைத் தட்டச்சு செய்யுங்கள்:
# awk '{print $1}' test.txt
தானாகவே awk கோப்பு Tab-ஆல் பிரிக்கப்பட்டிருக்கிறது என கண்டறிந்து, அதிலுள்ள முதல் செங்குத்து வரிசையை மட்டும் எடுத்துக் காட்டுகிறது. உங்களது பெறுகை, கீழே கொடுக்கப்பட்டுள்ள பெறுகையை ஒத்திருக்கும்.
Filesystem
/dev/sda3 /dev/sda1 /dev/sda4 /dev/shm
இதே மாதிரி கோப்பிலுள்ள எந்த ஒரு செங்குத்து வரிசையையும் தனியாக பிரித்தெடுக்க முடியும். மூன்றாவது செங்குத்து வரிசையை பிரித்தெடுப்பதற்கு, மேலே நாம் முதல் செங்குத்து வரிசையை எடுக்கப் பயன்படுத்திய கட்டளையை கீழே கொடுக்கப்பட்டுள்ளபடி மாற்றினால் போதும்.
# awk '{print $3}' test.txt
ஒன்றுக்கு மேற்பட்ட வரிசைகளைக் கூட awk-ஐ பயன்படுத்தி நாம் எடுக்கலாம். அதற்கு வேண்டுமென்ற வரிசைகளை கட்டளையில் சேர்த்து, வரிசைகளை காற்புள்ளியால் பிரித்து விடுங்கள்.
# awk '{print $1, $3, $6}' test.txt
இந்த கட்டளை முதலாம், மூன்றாம் மற்றும் ஆறாம் வரிசைகளை எடுத்துக் காண்பிக்கும்.
Filesystem Used Mounted /dev/sda3 25257692 / /dev/sda1 30293 /boot /dev/sda4 46476484 /home /dev/shm 0 /dev/shm
Space அல்லது Tab அல்லாமல், பிறவற்றால் கோப்பு பிரிக்கப்பட்டிருந்தால் (உதாரணத்திற்கு ‘/etc/passwd’ கோப்பு முக்காற் புள்ளியால் பிரிக்கப்பட்டிருக்கும்) awk-ஆல் அவற்றைத் தானாக பிரித்தறிய முடியாது. அந்த மாதிரியான தருணங்களில், சரியான பிரிப்பானை(separator) உபயோகப்படுத்தும்படி awk-ஐ நாம் அறிவுறுத்த வேண்டும். கீழ்வரும் கட்டளை ‘/etc/passwd’ கோப்பிலுள்ள முதல் செங்குத்து வரிசையை பிரித்தெடுத்து காண்பிக்க பயன்படுகிறது.
# awk -F':' '{print $1}' /etc/passwd
இந்த கட்டளை உங்கள் அமைப்பிலுள்ள பயனர்களின் பெயர்களை பெறுகையில் கொடுக்கிறது.
root bin daemon adm lp subramani
இதே மாதிரி எந்தொரு பிரிப்பானையும் பயன்படுத்தி தரவுகளைப் பிரித்தெடுக்கலாம். awk-ஐப் பயன்படுத்தி உங்களது பதிவுக் கோப்புகளிலிருந்து உங்களுக்குத் தேவையான விவரங்களை சேகரிக்கலாம். உதாரணத்திற்கு, உங்களது இணைய வழங்கியில்(Web Server) எந்த இணைய URL, எந்தெந்த இணைய விதிமுறை முகவரிகளிலிருந்து(IP Address) பார்க்கப்பட்டிருக்கிறது என்று நீங்கள் தெரிந்து கொள்ள விரும்பினால், awk-ஐ பயன்படுத்தி இந்த விவரங்களை வழங்கியின் access பதிவுக் கோப்பிலிருந்து எடுத்துக் கொள்ளலாம். அதற்கு கீழே கொடுக்கப்பட்டுள்ள கட்டளையை உபயோகப்படுத்துங்கள்:-
# awk '$9 == 200 {print $1, $7}' access.log 10.110.1.95 /ui/ 10.120.20.226 /index.html 10.35.110.1 /ui/ 10.35.110.1 /ui/ 10.35.110.1 /ui/
இது மாதிரி விவரங்களை சேகரிப்பதன் மூலம், உங்களது இணையத்திலிருந்து யாராவது செய்திகளைத் திருடுகிறார்களா என்று உங்களது இணையத்தை அதிகமாக யார் பார்வையிடுகிறார்கள் என்பதிலிருந்து அறியலாம். உங்களது இணையத்தளம் எந்த இணைய விதிமுறை முகவரியிலிருந்து அதிகம் பார்க்கப்பட்டிருக்கின்றது என்பதை அறிய,
# awk '$9 == 200 {print $1}' access.log | sort | uniq -c | sort -nr 1557 10.35.110.1 386 10.110.1.95 209 10.120.253.171 87 10.120.20.196 34 10.120.253.151 8 10.120.20.226
ஆங்கில மூலம் :- www.simplehelp.net/2012/02/05/how-to-get-started-using-awk/
இரா.சுப்ரமணி.
மின்னஞ்சல் : subramani95@gmail.com
வலைப்பதிவு : rsubramani.wordpress.com