AWK കമാൻഡുകളും സ്ക്രിപ്റ്റുകളും എഴുതുക

കമാൻഡുകൾ, സിന്റാക്സ്, ഉദാഹരണങ്ങൾ

ടെക്സ്റ്റ് ഫയലുകളെ-പ്രത്യേകിച്ചും വരികൾ (വരികൾ), നിരകൾ എന്നിവ സംഘടിപ്പിക്കുന്ന ഡേറ്റാ ഫയലുകളുടെ വിശകലനം അല്ലെങ്കിൽ വിശകലനം ചെയ്യുന്നതിനുള്ള ശക്തമായ ഒരു രീതിയാണ് awk കമാൻഡ്.

ലളിതമായ awk കമാൻഡുകൾ കമാൻഡ് ലൈനിൽ പ്രവർത്തിപ്പിക്കാം . കൂടുതൽ സങ്കീർണ്ണമായ ചുമതലകൾ ഒരു മട്ടിലുള്ള പ്രോഗ്രാമുകൾ (awk സ്ക്രിപ്റ്റുകൾ എന്ന് വിളിക്കുന്നത്) ആയിരിക്കണം.

ഒരു awk കമാന്ഡിന്റെ അടിസ്ഥാന ശൈലി ഇതുപോലെയാണ്:

awk 'pattern {action}' input-file> ഔട്ട്പുട്ട്-ഫയല്

ഇതിനർത്ഥം: ഇൻപുട്ട് ഫയലിന്റെ ഓരോ വരിയും എടുക്കുക; വരിയിൽ ഉണ്ടെങ്കിൽ പാറ്റേൺ പ്രവർത്തിപ്പിക്കുവാനുള്ള വരി പ്രയോഗിക്കുകയും ഫലത്തിൽ ഔട്ട്പുട്ട്-ഫയലിലേക്ക് എഴുതുകയും ചെയ്യുക. പാറ്റേൺ ഒഴിവാക്കിയാൽ, നടപടി എല്ലാ വരിയിലും പ്രയോഗിക്കുന്നു. ഉദാഹരണത്തിന്:

awk '{print $ 5}' table1.txt> output1.txt

ഈ വരി ഓരോ വരിയുടെയും അഞ്ചാം നിരയുടെ ഘടകഭാഗം സ്വീകരിക്കുന്നു കൂടാതെ ഔട്ട്പുട്ട് ഫയലിൽ "output.txt" എന്ന് രേഖപ്പെടുത്തുകയും ചെയ്യുന്നു. '$ 4' എന്ന വേരിയബിൾ രണ്ടാമത്തെ നിരയെ സൂചിപ്പിക്കുന്നു. അതുപോലെ തന്നെ, ആദ്യത്തേയും രണ്ടാമത്തേയും മൂന്നാമത്തെയും കോളം നിങ്ങൾക്ക് $ 1, $ 2, $ 3 മുതലായവ ഉപയോഗിച്ച് പ്രവേശിക്കാം. സ്ഥിര നിരകൾ വഴി സ്പെയ്സുകളോ ടാബുകളോ (വെളുത്ത സ്പേയ്സ് എന്നു വിളിക്കുന്നു) കൊണ്ട് വേർതിരിക്കപ്പെടുന്നു. അതുകൊണ്ട്, "table1.txt" എന്ന ഇൻപുട്ട് ഫയൽ ഈ വരികൾ ഉൾക്കൊള്ളുന്നു:

1, ജസ്റ്റിൻ ടിംബർലെക്ക്, തലക്കെട്ട് 545, വില $ 7.30 2, ടെയ്ലർ സ്വിഫ്റ്റ്, തലക്കെട്ട് 723, വില $ 7.90 3, മിക് ജാഗർ, തലക്കെട്ട് 610, വില $ 7.90 4, ലേഡി ഗാഗ, ശീർഷകം 118, വില $ 7.30 5, ജോണി കാഷ്, തലക്കെട്ട് 482, വില $ 6.50 6, എൽവിസ് പ്രെസ്ലി, തലക്കെട്ട് 335, വില $ 7.30 7, ജോൺ ലെനോൺ, തലക്കെട്ട് 271, വില $ 7.90 8, മൈക്കിൾ ജാക്സൺ, തലക്കെട്ട് 373, വില $ 5.50

അപ്പോൾ ഔട്ട്പുട്ട് ഫയലിൽ "output1.txt" എന്ന കമാൻഡ് താഴെ പറയുന്ന വരികൾ എഴുതുന്നു:

545, 723, 610, 118, 482, 335, 271, 373,

കോളം ഡിസ്ട്രിബ്യൂട്ടർ സ്പെയ്സുകളോ ടാബുകളോ അല്ലാതെ മറ്റെന്തെങ്കിലും ആണെങ്കിൽ, കോമ പോലെ, നിങ്ങൾ താഴെ കൊടുത്തിരിക്കുന്ന alk പ്രസ്താവനയിൽ സൂചിപ്പിക്കാം:

awk -F, '{print $ 3}' table1.txt> output1.txt

നിരകൾ കോമ ഉപയോഗിച്ച് വേർതിരിക്കപ്പെട്ടതാണെങ്കിൽ ഓരോ വരിയുടെയും കോളം 3 ൽ നിന്നും ഘടകത്തെ തിരഞ്ഞെടുക്കും. അതിനാൽ, ഈ സാഹചര്യത്തിൽ ഔട്ട്പുട്ട്:

തലക്കെട്ട് 545 ശീർഷകം 723 ശീർഷകം 610 ശീർഷകം 118 ശീർഷകം 482 ശീർഷകം 335 ശീർഷകം 271 ശീർഷകം 373

വളഞ്ഞ ബ്രാക്കറ്റിനുള്ളിലെ പ്രസ്താവനകളുടെ ലിസ്റ്റ് ('{', '}') ബ്ലോക്ക് എന്ന് പറയുന്നു. ഒരു ബ്ലോക്ക് മുന്നിൽ നിങ്ങൾ ഒരു വ്യവസ്ഥാ പദപ്രയോഗം നൽകിയിട്ടുണ്ടെങ്കിൽ, വ്യവസ്ഥയിൽ സത്യമുണ്ടെങ്കിൽ മാത്രമേ ബ്ലോക്കിലെ സ്റ്റേറ്റ്മെന്റ് പ്രവർത്തിപ്പിക്കുകയുള്ളൂ.

awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt

ഈ സാഹചര്യത്തിൽ, $ 7 == "\ $ 7.30" എന്നതാണു്, അതായതു്, നിരയുടെ ഏഴിലെ ഘടകം $ 7.30 ആണെന്നാണു്. ഒരു ഡോളർ ചിഹ്നമായി വ്യാഖ്യാനിക്കുന്നതിനു പകരം $ 7 നെ വ്യാഖ്യാനിക്കുന്നതിൽ നിന്നും ഡോളർ ചിഹ്നത്തിനു മുന്നിലുള്ള പിന്മാറ്റം ഉപയോഗിക്കുന്നു.

അതുകൊണ്ട് ഈ വാല്യൂ സ്റ്റേറ്റ്മെന്റ് ഓരോ വരിയുടെയും മൂന്നാം നിരയിലെ ഘടകത്തെ പ്രിന്റ് ചെയ്യുന്നു, അതിൽ കോളം 7 ൽ "$ 7.30" ഉണ്ട്.

നിങ്ങൾക്ക് സാധാരണ പദപ്രയോഗങ്ങൾ കൺഡിഷനായി ഉപയോഗിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്:

awk '/ 30 / {print $ 3}' table1.txt

രണ്ട് സ്ലാഷുകൾ ('/') തമ്മിലുള്ള സ്ട്രിംഗ് റെഗുലർ എക്സ്പ്രഷനാണ്. ഈ സാഹചര്യത്തിൽ, ഇത് സ്ട്രിംഗ് ആണ് "30." ഒരു വരിയിൽ സ്ട്രിംഗ് "30" ഉണ്ടെങ്കിൽ, ആ വരിയുടെ 3rd നിരയിൽ സിസ്റ്റം എലമെന്റിനെ പ്രിന്റ് ചെയ്യുന്നു. മുകളിലുള്ള ഉദാഹരണത്തിൽ ഔട്ട്പുട്ട് ഇതായിരിക്കും:

ടിംബർബർക്ക്, ഗാഗ, പ്രേസ്ലെ,

പട്ടിക ഉദാഹരണം സംഖ്യകൾ താഴെപ്പറയുന്നവയാണെങ്കിൽ, അവയിൽ കണക്കുകൂട്ടലുകൾ പ്രവർത്തിപ്പിക്കുകയാണെങ്കിൽ:

awk '{പ്രിന്റ് ($ 2 * $ 3) + $ 7}'

നിലവിലെ വരിയിലെ വരികൾ ($ 1, $ 2, മുതലായവ) ആക്സസ് ചെയ്യുന്ന വേരിയബിളുകൾക്ക് പുറമെ, മുഴുവൻ വരിയും (വരി) സൂചിപ്പിക്കുന്ന ചരങ്ങൾ $ 0 ഉം ഫീല്ഡുകളുടെ എണ്ണം പിടിക്കുന്ന വേരിയബിള് NF ഉം ഉണ്ട്.

നിങ്ങൾക്ക് ഈ ഉദാഹരണത്തിൽ പുതിയ വേരിയബിളുകൾ പോലും നിർവചിക്കാം:

awk '{sum = 0; (col = 1; col <= NF; col ++) തുക + = $ col; അച്ചടി തുക } '

ഇത് ഓരോ നിരയുടെയും എല്ലാ ഘടകങ്ങളുടെയും ആകെത്തുക കണക്കു കൂട്ടുകയും പ്രിന്റ് ചെയ്യുകയും ചെയ്യുന്നു.

മഅ്ക്ക് സ്റ്റേറ്റ്മെന്റുകൾ നിരന്തരമായി sed കമാൻഡുകൾ കൂടിച്ചേർന്ന്.