Linux లో awk కమాండ్ ఎలా ఉపయోగించాలి
Linux లో,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 {print "యాక్టివ్ సెషన్స్"} {print $ 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 యొక్క ఆర్క్టాంజెంట్ను ముద్రిస్తుంది (ఇది గణిత స్థిరాంకం, పై) అవుతుంది:
awk 'BEGIN {print atan2 (0, -1)}'
కింది ఆదేశంలో, మేము ఫలితాన్ని సవరించాము atan2 ()
మేము దానిని ముద్రించే ముందు పని చేయండి:
awk 'BEGIN {print atan2 (0, -1) * 100}'
విధులు వ్యక్తీకరణలను పారామితులుగా అంగీకరించగలవు. ఉదాహరణకు, 25 యొక్క వర్గమూలాన్ని అడగడానికి ఇక్కడ ఒక మెలికలు తిరిగిన మార్గం:
awk 'BEGIN {print sqrt ((2 + 3) * 5)}'
awk స్క్రిప్ట్స్
మీ కమాండ్ లైన్ సంక్లిష్టంగా ఉంటే, లేదా మీరు మళ్ళీ ఉపయోగించాలనుకుంటున్నారని మీకు తెలిసిన దినచర్యను అభివృద్ధి చేస్తే, మీరు మీ బదిలీ చేయవచ్చు awk
స్క్రిప్ట్లోకి ఆదేశించండి.
మా ఉదాహరణ స్క్రిప్ట్లో, మేము ఈ క్రిందివన్నీ చేయబోతున్నాం:
- స్క్రిప్ట్ను అమలు చేయడానికి ఏ ఎక్జిక్యూటబుల్ ఉపయోగించాలో షెల్కు చెప్పండి.
- సిద్ధం
awk
ఉపయోగించడానికిFS
కోలన్లచే వేరు చేయబడిన ఫీల్డ్లతో ఇన్పుట్ టెక్స్ట్ చదవడానికి ఫీల్డ్ సెపరేటర్ వేరియబుల్ (:
). - ఉపయోగించడానికి
OFS
చెప్పడానికి అవుట్పుట్ ఫీల్డ్ సెపరేటర్awk
కోలన్లను ఉపయోగించడానికి (:
) అవుట్పుట్లో ఫీల్డ్లను వేరు చేయడానికి. - కౌంటర్ను 0 (సున్నా) కు సెట్ చేయండి.
- ప్రతి టెక్స్ట్ యొక్క రెండవ ఫీల్డ్ను ఖాళీ విలువకు సెట్ చేయండి (ఇది ఎల్లప్పుడూ “x”, కాబట్టి మేము దీన్ని చూడవలసిన అవసరం లేదు).
- సవరించిన రెండవ ఫీల్డ్తో పంక్తిని ముద్రించండి.
- కౌంటర్ పెంచండి.
- కౌంటర్ విలువను ముద్రించండి.
మా స్క్రిప్ట్ క్రింద చూపబడింది.
ది ప్రారంభించండి
నియమం సన్నాహక దశలను నిర్వహిస్తుంది, అయితేEND
నియమం కౌంటర్ విలువను ప్రదర్శిస్తుంది. మధ్య నియమం (దీనికి ప్రతి పంక్తికి సరిపోయే పేరు లేదా నమూనా లేదు) రెండవ ఫీల్డ్ను సవరించుకుంటుంది, పంక్తిని ముద్రిస్తుంది మరియు కౌంటర్ను పెంచుతుంది.
స్క్రిప్ట్ యొక్క మొదటి పంక్తి ఏ ఎక్జిక్యూటబుల్ ఉపయోగించాలో షెల్కు చెబుతుంది (awk
, మా ఉదాహరణలో) స్క్రిప్ట్ను అమలు చేయడానికి. ఇది కూడా వెళుతుంది -f
(ఫైల్ పేరు) ఎంపిక awk
, ఇది ప్రాసెస్ చేయబోయే వచనం ఫైల్ నుండి వస్తుంది. మేము ఫైల్ పేరును స్క్రిప్ట్ నడుపుతున్నప్పుడు పాస్ చేస్తాము.
మేము దిగువ స్క్రిప్ట్ను వచనంగా చేర్చాము, కాబట్టి మీరు కత్తిరించి అతికించవచ్చు:
#! / usr / bin / awk -f BEGIN {# ఇన్పుట్ మరియు అవుట్పుట్ ఫీల్డ్ సెపరేటర్లను సెట్ చేయండి FS = ":" OFS = ":" # సున్నా ఖాతాల కౌంటర్ ఖాతాలు = 0} {# ఫీల్డ్ 2 ను ఏమీ లేకుండా సెట్ చేయండి $ 2 = "" # మొత్తం పంక్తి ముద్రణ $ 0 # మరొక ఖాతా ఖాతాలను లెక్కించండి ++} END {# ఫలితాలను ముద్రించండి ఖాతాలు "ఖాతాలు. \ n"}
అనే ఫైల్లో దీన్ని సేవ్ చేయండి omit.awk
. స్క్రిప్ట్ను ఎక్జిక్యూటబుల్ చేయడానికి, మేము ఈ క్రింది వాటిని ఉపయోగించి టైప్ చేస్తాము chmod
:
chmod + x omit.awk
ఇప్పుడు, మేము దీన్ని అమలు చేస్తాము మరియు పాస్ చేస్తాము / etc / passwd
స్క్రిప్ట్కు ఫైల్ చేయండి. ఇది ఫైల్awk
స్క్రిప్ట్లోని నియమాలను ఉపయోగించి మా కోసం ప్రాసెస్ చేస్తుంది:
./omit.awk / etc / passwd
క్రింద చూపిన విధంగా ఫైల్ ప్రాసెస్ చేయబడుతుంది మరియు ప్రతి పంక్తి ప్రదర్శించబడుతుంది.
రెండవ ఫీల్డ్లోని “x” ఎంట్రీలు తొలగించబడ్డాయి, అయితే ఫీల్డ్ సెపరేటర్లు ఇప్పటికీ ఉన్నాయని గమనించండి. పంక్తులు లెక్కించబడతాయి మరియు మొత్తం అవుట్పుట్ దిగువన ఇవ్వబడుతుంది.
awk ఇబ్బందికరమైనది కాదు
awk
ఇబ్బందికరమైనది కాదు; ఇది చక్కదనం కోసం నిలుస్తుంది. ఇది ప్రాసెసింగ్ ఫిల్టర్ మరియు రిపోర్ట్ రైటర్గా వర్ణించబడింది. మరింత ఖచ్చితంగా, ఇది ఈ రెండూ, లేదా, ఈ రెండు పనుల కోసం మీరు ఉపయోగించగల సాధనం. కొన్ని పంక్తులలో,awk
సాంప్రదాయ భాషలో విస్తృతమైన కోడింగ్ అవసరం సాధిస్తుంది.
ఆ శక్తిని కలిగి ఉన్న నియమాల యొక్క సాధారణ భావన, ప్రాసెస్ చేయడానికి వచనాన్ని ఎంచుకోవడం మరియు ప్రాసెసింగ్ను నిర్వచించే చర్యల ద్వారా ఉపయోగించబడుతుంది.