லினக்ஸில் awk கட்டளையை எவ்வாறு பயன்படுத்துவது
லினக்ஸில்,awk
ஒரு கட்டளை-வரி உரை கையாளுதல் டைனமோ, அத்துடன் சக்திவாய்ந்த ஸ்கிரிப்டிங் மொழி. அதன் சில சிறந்த அம்சங்களுக்கான அறிமுகம் இங்கே.
எப்படி அதன் பெயர் கிடைத்தது
திawk
1977 இல் அசல் பதிப்பை எழுதிய மூன்று நபர்களின் முதலெழுத்துக்களைப் பயன்படுத்தி கட்டளைக்கு பெயரிடப்பட்டது: ஆல்பிரட் அஹோ, பீட்டர் வெயின்பெர்கர் மற்றும் பிரையன் கெர்னிகன். இந்த மூன்று பேரும் புகழ்பெற்ற AT&T பெல் லேபரேட்டரீஸ் யூனிக்ஸ் பாந்தியனைச் சேர்ந்தவர்கள். அதன் பின்னர் பலரின் பங்களிப்புடன், awk
தொடர்ந்து உருவாகி வருகிறது.
இது ஒரு முழு ஸ்கிரிப்டிங் மொழி, அத்துடன் கட்டளை வரிக்கான முழுமையான உரை கையாளுதல் கருவித்தொகுப்பு. இந்த கட்டுரை உங்கள் பசியைத் தூண்டினால், நீங்கள் ஒவ்வொரு விவரத்தையும் பார்க்கலாம்awk
மற்றும் அதன் செயல்பாடு.
விதிகள், வடிவங்கள் மற்றும் செயல்கள்
awk
வடிவங்கள் மற்றும் செயல்களைக் கொண்ட விதிகளைக் கொண்ட நிரல்களில் வேலை செய்கிறது. முறைக்கு பொருந்தக்கூடிய உரையில் செயல் செயல்படுத்தப்படுகிறது. வடிவங்கள் சுருள் பிரேஸ்களில் இணைக்கப்பட்டுள்ளன ({}
). ஒன்றாக, ஒரு முறை மற்றும் செயல் ஒரு விதியை உருவாக்குகின்றன. முழு awk
நிரல் ஒற்றை மேற்கோள்களில் இணைக்கப்பட்டுள்ளது ('
).
எளிமையான வகையைப் பார்ப்போம் awk
நிரல். இதற்கு எந்த வடிவமும் இல்லை, எனவே அதில் உரை வழங்கப்பட்ட ஒவ்வொரு வரியுடனும் பொருந்துகிறது. இதன் பொருள் ஒவ்வொரு வரியிலும் செயல் செயல்படுத்தப்படுகிறது. இன் வெளியீட்டில் இதைப் பயன்படுத்துவோம் who
கட்டளை.
இதிலிருந்து நிலையான வெளியீடு இங்கே who
:
who
ஒருவேளை அந்தத் தகவல் அனைத்தும் எங்களுக்குத் தேவையில்லை, மாறாக, கணக்குகளில் பெயர்களைக் காண விரும்பலாம். நாம் வெளியீட்டை குழாய் பதிக்க முடியும் who
க்குள் awk
, பின்னர் சொல்லுங்கள் awk
முதல் புலத்தை மட்டும் அச்சிட.
இயல்பாக, awk
ஒரு புலத்தை இடைவெளியால் சூழப்பட்ட எழுத்துகளின் சரம், ஒரு வரியின் ஆரம்பம் அல்லது ஒரு வரியின் முடிவு என்று கருதுகிறது. புலங்கள் ஒரு டாலர் அடையாளத்தால் அடையாளம் காணப்படுகின்றன ($
) மற்றும் ஒரு எண். அதனால்,$1
முதல் புலத்தை குறிக்கிறது, அதை நாங்கள் பயன்படுத்துவோம் அச்சு
முதல் புலத்தை அச்சிடுவதற்கான நடவடிக்கை.
பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம்:
யார் | awk '{print $ 1}'
awk
முதல் புலத்தை அச்சிட்டு, மீதமுள்ள வரியை நிராகரிக்கிறது.
நாம் விரும்பும் பல துறைகளை அச்சிடலாம். நாம் கமாவை ஒரு பிரிப்பானாகச் சேர்த்தால்,awk
ஒவ்வொரு புலத்திற்கும் இடையில் ஒரு இடத்தை அச்சிடுகிறது.
நபர் உள்நுழைந்த நேரத்தையும் அச்சிட பின்வருவதைத் தட்டச்சு செய்கிறோம் (புலம் நான்கு):
யார் | awk '{print $ 1, $ 4}'
இரண்டு சிறப்பு புல அடையாளங்காட்டிகள் உள்ளன. இவை உரையின் முழு வரியையும், உரையின் வரியின் கடைசி புலத்தையும் குறிக்கின்றன:
- $0: உரையின் முழு வரியையும் குறிக்கிறது.
- $1: முதல் புலத்தை குறிக்கிறது.
- $2: இரண்டாவது புலத்தை குறிக்கிறது.
- $7: ஏழாவது புலத்தை குறிக்கிறது.
- $45: 45 வது புலத்தை குறிக்கிறது.
- $ NF: “புலங்களின் எண்ணிக்கையை” குறிக்கிறது, மேலும் கடைசி புலத்தை குறிக்கிறது.
டென்னிஸ் ரிச்சிக்குக் கூறப்பட்ட ஒரு குறுகிய மேற்கோளைக் கொண்ட ஒரு சிறிய உரை கோப்பைக் கொண்டுவருவதற்கு பின்வருவதைத் தட்டச்சு செய்கிறோம்:
பூனை dennis_ritchie.txt
எங்களுக்கு வேண்டும்awk
மேற்கோளின் முதல், இரண்டாவது மற்றும் கடைசி புலத்தை அச்சிட. இது முனைய சாளரத்தில் சுற்றப்பட்டிருந்தாலும், இது ஒரு ஒற்றை வரி மட்டுமே என்பதை நினைவில் கொள்க.
பின்வரும் கட்டளையை நாங்கள் தட்டச்சு செய்கிறோம்:
awk '{print $ 1, $ 2, $ NF den' dennis_ritchie.txt
“எளிமை” என்பது எங்களுக்குத் தெரியாது. உரையின் வரிசையில் 18 வது புலம், நாங்கள் கவலைப்படுவதில்லை. எங்களுக்குத் தெரிந்த விஷயம் இது கடைசி புலம், நாம் பயன்படுத்தலாம் $ NF
அதன் மதிப்பைப் பெற. காலம் என்பது புலத்தின் உடலில் மற்றொரு பாத்திரமாக கருதப்படுகிறது.
வெளியீட்டு புலம் பிரிப்பான்களைச் சேர்த்தல்
நீங்கள் சொல்லலாம் awk
இயல்புநிலை இட எழுத்துக்கு பதிலாக புலங்களுக்கு இடையில் ஒரு குறிப்பிட்ட எழுத்தை அச்சிட. இருந்து இயல்புநிலை வெளியீடுதேதி
கட்டளை சற்று விசித்திரமானது, ஏனெனில் நேரம் அதன் நடுவே சரியானது. இருப்பினும், பின்வருவனவற்றை நாம் தட்டச்சு செய்து பயன்படுத்தலாம் awk
நாம் விரும்பும் புலங்களை பிரித்தெடுக்க:
தேதி
தேதி | awk '{print $ 2, $ 3, $ 6}'
நாங்கள் பயன்படுத்துவோம் OFS
(வெளியீட்டு புலம் பிரிப்பான்) மாதம், நாள் மற்றும் ஆண்டுக்கு இடையில் ஒரு பிரிப்பான் வைக்க மாறி. கீழே நாம் கட்டளையை ஒற்றை மேற்கோள்களில் இணைக்கிறோம் ('
), சுருள் பிரேஸ்கள் அல்ல ({}
):
தேதி | awk 'OFS = "/" {அச்சு $ 2, $ 3, $ 6}'
தேதி | awk 'OFS = "-" {அச்சு $ 2, $ 3, $ 6}'
BEGIN மற்றும் END விதிகள்
அ தொடங்குங்கள்
எந்தவொரு உரை செயலாக்கமும் தொடங்குவதற்கு முன்பு விதி ஒரு முறை செயல்படுத்தப்படுகிறது. உண்மையில், இது முன்பு செயல்படுத்தப்படுகிறது awk
எந்த உரையையும் கூட படிக்கிறது. ஒரு END
அனைத்து செயலாக்கமும் முடிந்ததும் விதி செயல்படுத்தப்படுகிறது. நீங்கள் பல வேண்டும் தொடங்குங்கள்
மற்றும்END
விதிகள், அவை ஒழுங்காக இயங்கும்.
எங்கள் உதாரணத்திற்கு a தொடங்குங்கள்
விதி, நாங்கள் முழு மேற்கோளையும் அச்சிடுவோம் dennis_ritchie.txt
அதற்கு முன்னர் ஒரு தலைப்பைக் கொண்டு நாங்கள் முன்பு பயன்படுத்திய கோப்பு.
அவ்வாறு செய்ய, இந்த கட்டளையை தட்டச்சு செய்கிறோம்:
awk 'BEGIN {print "டென்னிஸ் ரிச்சி"} {print $ 0}' dennis_ritchie.txt
குறிப்பு தொடங்குங்கள்
விதி அதன் சொந்த சுருள் பிரேஸ்களின் தொகுப்பில் இணைக்கப்பட்டுள்ளது ({}
).
இதே நுட்பத்தை நாம் முன்னர் பயன்படுத்திய கட்டளையுடன் பயன்படுத்தலாம் who
க்குள் awk
. அவ்வாறு செய்ய, பின்வருவனவற்றை தட்டச்சு செய்கிறோம்:
யார் | awk 'BEGIN {"செயலில் அமர்வுகள்" {{அச்சு $ 1, $ 4}'
உள்ளீட்டு புலம் பிரிப்பான்கள்
உனக்கு வேண்டுமென்றால் awk
புலங்களை பிரிக்க இடைவெளியைப் பயன்படுத்தாத உரையுடன் பணிபுரிய, புலம் பிரிப்பாளராக உரை எந்த எழுத்தை பயன்படுத்துகிறது என்பதை நீங்கள் சொல்ல வேண்டும். உதாரணமாக, தி / etc / passwd
கோப்பு பெருங்குடலைப் பயன்படுத்துகிறது (:
) புலங்களை பிரிக்க.
நாங்கள் அந்த கோப்பையும் பயன்படுத்துவோம் -எஃப்
(பிரிப்பான் சரம்) சொல்ல விருப்பம் awk
பெருங்குடலைப் பயன்படுத்த (:
) பிரிப்பவராக. சொல்ல பின்வருவதைத் தட்டச்சு செய்கிறோம் awk
பயனர் கணக்கு மற்றும் வீட்டு கோப்புறையின் பெயரை அச்சிட:
awk -F: '{print $ 1, $ 6}' / etc / passwd
வெளியீட்டில் பயனர் கணக்கின் பெயர் (அல்லது பயன்பாடு அல்லது டீமான் பெயர்) மற்றும் வீட்டு கோப்புறை (அல்லது பயன்பாட்டின் இடம்) ஆகியவை உள்ளன.
வடிவங்களைச் சேர்த்தல்
நாங்கள் விரும்புவதெல்லாம் வழக்கமான பயனர் கணக்குகள் என்றால், மற்ற எல்லா உள்ளீடுகளையும் வடிகட்ட எங்கள் அச்சு செயலுடன் ஒரு வடிவத்தை சேர்க்கலாம். பயனர் ஐடி எண்கள் 1,000 க்கு சமமானவை அல்லது அதிகமாக இருப்பதால், அந்த தகவலில் எங்கள் வடிப்பானை அடிப்படையாகக் கொள்ளலாம்.
மூன்றாவது புலம் இருக்கும்போது மட்டுமே எங்கள் அச்சு செயலைச் செயல்படுத்த பின்வருவதைத் தட்டச்சு செய்கிறோம் ($3
) 1,000 அல்லது அதற்கு மேற்பட்ட மதிப்பைக் கொண்டுள்ளது:
awk -F: '$ 3> = 1000 {அச்சு $ 1, $ 6}' / etc / passwd
இது தொடர்புடைய செயலுடன் முறை உடனடியாக முந்தியிருக்க வேண்டும்.
நாம் பயன்படுத்தலாம் தொடங்குங்கள்
எங்கள் சிறிய அறிக்கைக்கு ஒரு தலைப்பை வழங்க விதி. பின்வருவனவற்றைப் பயன்படுத்தி தட்டச்சு செய்கிறோம் (\ n
) தலைப்பு சரத்தில் ஒரு புதிய வரி எழுத்தை செருகுவதற்கான குறியீடு:
awk -F: 'BEGIN {print "பயனர் கணக்குகள் \ n -------------"} $ 3> = 1000 {அச்சு $ 1, $ 6}' / etc / passwd
வடிவங்கள் முழு அளவிலான வழக்கமான வெளிப்பாடுகள், அவை அவற்றின் மகிமைகளில் ஒன்றாகும் awk
.
ஏற்றப்பட்ட கோப்பு முறைமைகளின் உலகளாவிய தனித்துவமான அடையாளங்காட்டிகளை (UUID கள்) காண விரும்புகிறோம் என்று சொல்லலாம். நாம் தேடினால் / etc / fstab
“UUID” என்ற சரத்தின் நிகழ்வுகளுக்கான கோப்பு, அது எங்களுக்கு அந்த தகவலை வழங்க வேண்டும்.
எங்கள் கட்டளையில் “/ UUID /” என்ற தேடல் முறையைப் பயன்படுத்துகிறோம்:
awk '/ UUID / {print $ 0}' / etc / fstab
இது “UUID” இன் அனைத்து நிகழ்வுகளையும் கண்டறிந்து அந்த வரிகளை அச்சிடுகிறது. நாம் இல்லாமல் அதே முடிவைப் பெற்றிருப்போம் அச்சு
செயல் ஏனெனில் இயல்புநிலை செயல் உரையின் முழு வரியையும் அச்சிடுகிறது. தெளிவுக்காக, வெளிப்படையாக இருப்பது பெரும்பாலும் பயனுள்ளதாக இருக்கும். நீங்கள் ஒரு ஸ்கிரிப்ட் அல்லது உங்கள் வரலாற்றுக் கோப்பைப் பார்க்கும்போது, உங்களுக்காக தடயங்களை விட்டுவிட்டதில் மகிழ்ச்சி அடைவீர்கள்.
கண்டுபிடிக்கப்பட்ட முதல் வரி ஒரு கருத்து வரி, மற்றும் “UUID” சரம் அதன் நடுவில் இருந்தாலும், awk
இன்னும் அதைக் கண்டுபிடித்தார். வழக்கமான வெளிப்பாட்டை மாற்றியமைத்து சொல்லலாம் awk
“UUID” உடன் தொடங்கும் வரிகளை மட்டுமே செயலாக்க. அவ்வாறு செய்ய, வரி டோக்கனின் தொடக்கத்தை உள்ளடக்கிய பின்வருவனவற்றை நாங்கள் தட்டச்சு செய்கிறோம் (^
):
awk '/ ^ UUID / {print $ 0}' / etc / fstab
அது உகந்தது! இப்போது, உண்மையான ஏற்ற வழிமுறைகளை மட்டுமே காண்கிறோம். வெளியீட்டை மேலும் செம்மைப்படுத்த, பின்வருவனவற்றை தட்டச்சு செய்து காட்சியை முதல் புலத்திற்கு கட்டுப்படுத்துகிறோம்:
awk '/ ^ UUID / {print $ 1}' / etc / fstab
இந்த கணினியில் பல கோப்பு முறைமைகள் பொருத்தப்பட்டிருந்தால், அவற்றின் UUID களின் நேர்த்தியான அட்டவணையைப் பெறுவோம்.
உள்ளமைக்கப்பட்ட செயல்பாடுகள்
awk
கட்டளை வரி மற்றும் ஸ்கிரிப்ட்களில் உங்கள் சொந்த நிரல்களில் நீங்கள் அழைக்க மற்றும் பயன்படுத்தக்கூடிய பல செயல்பாடுகளைக் கொண்டுள்ளது. நீங்கள் சில தோண்டல்களைச் செய்தால், நீங்கள் அதை மிகவும் பலனளிப்பீர்கள்.
ஒரு செயல்பாட்டை அழைப்பதற்கான பொதுவான நுட்பத்தை நிரூபிக்க, சில எண்களைப் பார்ப்போம். எடுத்துக்காட்டாக, பின்வருவது 625 இன் சதுர மூலத்தை அச்சிடுகிறது:
awk 'BEGIN {print sqrt (625)}'
இந்த கட்டளை 0 (பூஜ்ஜியம்) மற்றும் -1 (இது கணித மாறிலியாக இருக்கும் pi) அச்சிடுகிறது:
awk 'BEGIN at print atan2 (0, -1)}'
பின்வரும் கட்டளையில், இதன் முடிவை மாற்றியமைக்கிறோம் atan2 ()
நாங்கள் அதை அச்சிடுவதற்கு முன்பு செயல்படுகிறோம்:
awk 'BEGIN {print atan2 (0, -1) * 100}'
செயல்பாடுகள் வெளிப்பாடுகளை அளவுருக்களாக ஏற்றுக்கொள்ளலாம். எடுத்துக்காட்டாக, 25 இன் சதுர மூலத்தைக் கேட்க ஒரு சுருண்ட வழி இங்கே:
awk 'BEGIN {print sqrt ((2 + 3) * 5)}'
awk ஸ்கிரிப்ட்கள்
உங்கள் கட்டளை வரி சிக்கலாகிவிட்டால், அல்லது நீங்கள் மீண்டும் பயன்படுத்த விரும்புவீர்கள் என்று உங்களுக்குத் தெரிந்த ஒரு வழக்கத்தை நீங்கள் உருவாக்கினால், நீங்கள் மாற்றலாம் awk
ஒரு ஸ்கிரிப்ட்டில் கட்டளை.
எங்கள் எடுத்துக்காட்டு ஸ்கிரிப்டில், பின்வரும் அனைத்தையும் நாங்கள் செய்யப்போகிறோம்:
- ஸ்கிரிப்டை இயக்க எந்த இயங்கக்கூடிய ஷெல்லிடம் சொல்லுங்கள்.
- தயார்
awk
பயன்படுத்தஎஃப்.எஸ்
புலங்களால் பிரிக்கப்பட்ட புலங்களுடன் உள்ளீட்டு உரையைப் படிக்க புலம் பிரிப்பான் மாறி (:
). - பயன்படுத்த
OFS
சொல்ல வெளியீட்டு புலம் பிரிப்பான்awk
பெருங்குடல்களைப் பயன்படுத்த (:
) வெளியீட்டில் புலங்களை பிரிக்க. - 0 (பூஜ்ஜியம்) க்கு ஒரு கவுண்டரை அமைக்கவும்.
- ஒவ்வொரு வரியின் இரண்டாவது புலத்தையும் வெற்று மதிப்பாக அமைக்கவும் (இது எப்போதும் “x” தான், எனவே நாங்கள் அதைப் பார்க்கத் தேவையில்லை).
- மாற்றியமைக்கப்பட்ட இரண்டாவது புலத்துடன் வரியை அச்சிடுக.
- கவுண்டரை அதிகரிக்கவும்.
- கவுண்டரின் மதிப்பை அச்சிடுக.
எங்கள் ஸ்கிரிப்ட் கீழே காட்டப்பட்டுள்ளது.
தி தொடங்குங்கள்
விதி தயாரிப்பு நடவடிக்கைகளை மேற்கொள்கிறது, அதே நேரத்தில்END
விதி எதிர் மதிப்பைக் காட்டுகிறது. நடுத்தர விதி (இதற்கு ஒவ்வொரு பெயருக்கும் பொருந்தாத பெயரும் வடிவமும் இல்லை) இரண்டாவது புலத்தை மாற்றியமைக்கிறது, வரியை அச்சிடுகிறது, மேலும் கவுண்டரை அதிகரிக்கிறது.
ஸ்கிரிப்ட்டின் முதல் வரி ஷெல்லிடம் எந்த இயங்கக்கூடியது என்று கூறுகிறது (awk
, எங்கள் எடுத்துக்காட்டில்) ஸ்கிரிப்டை இயக்க. இது கடந்து செல்கிறது -f
(கோப்பு பெயர்) விருப்பம் awk
, இது செயலாக்கப் போகும் உரை ஒரு கோப்பிலிருந்து வரும் என்பதைத் தெரிவிக்கிறது. கோப்பு பெயரை ஸ்கிரிப்டை இயக்கும் போது அனுப்புவோம்.
கீழே உள்ள ஸ்கிரிப்டை உரையாக சேர்த்துள்ளோம், எனவே நீங்கள் வெட்டி ஒட்டலாம்:
#! # முழு வரி அச்சு அச்சிடுக $ 0 # மற்றொரு கணக்குக் கணக்குகளை எண்ணுங்கள் ++} END {# முடிவுகளை அச்சிடும் கணக்குகள் "கணக்குகள். \ n"}
இதை ஒரு கோப்பில் சேமிக்கவும் omit.awk
. ஸ்கிரிப்டை இயக்கக்கூடியதாக மாற்ற, பின்வரும்வற்றைப் பயன்படுத்தி தட்டச்சு செய்கிறோம் chmod
:
chmod + x omit.awk
இப்போது, நாங்கள் அதை இயக்கி கடந்து செல்வோம் / etc / passwd
ஸ்கிரிப்டுக்கு கோப்பு. இது கோப்புawk
ஸ்கிரிப்ட்டில் உள்ள விதிகளைப் பயன்படுத்தி எங்களுக்காக செயலாக்கும்:
./omit.awk / etc / passwd
கோப்பு செயலாக்கப்பட்டு ஒவ்வொரு வரியும் கீழே காட்டப்பட்டுள்ளபடி காட்டப்படும்.
இரண்டாவது புலத்தில் உள்ள “x” உள்ளீடுகள் அகற்றப்பட்டன, ஆனால் புல பிரிப்பான்கள் இன்னும் உள்ளன என்பதை நினைவில் கொள்க. கோடுகள் கணக்கிடப்பட்டு மொத்தம் வெளியீட்டின் அடிப்பகுதியில் கொடுக்கப்பட்டுள்ளது.
awk மோசமானதைக் குறிக்கவில்லை
awk
மோசமானதாக நிற்கவில்லை; இது நேர்த்தியைக் குறிக்கிறது. இது செயலாக்க வடிப்பான் மற்றும் அறிக்கை எழுத்தாளர் என விவரிக்கப்பட்டுள்ளது. இன்னும் துல்லியமாக, இது இரண்டும், அல்லது, இந்த இரண்டு பணிகளுக்கும் நீங்கள் பயன்படுத்தக்கூடிய ஒரு கருவி. ஒரு சில வரிகளில்,awk
ஒரு பாரம்பரிய மொழியில் விரிவான குறியீட்டு தேவைப்படுவதை அடைகிறது.
வடிவங்களைக் கொண்டிருக்கும், செயலாக்க உரையைத் தேர்ந்தெடுக்கும் செயலாக்கத்தை வரையறுக்கும் செயல்களின் எளிய கருத்தாக்கத்தால் அந்த சக்தி பயன்படுத்தப்படுகிறது.