Awk ബിൽറ്റ്-ഇൻ വേരിയബിളുകൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് മനസിലാക്കുക - ഭാഗം 10


Awk ഫീച്ചറുകളുടെ വിഭാഗം കണ്ടെത്തുമ്പോൾ, പരമ്പരയുടെ ഈ ഭാഗത്ത്, Awk-ലെ ബിൽറ്റ്-ഇൻ വേരിയബിളുകൾ എന്ന ആശയത്തിലൂടെ നമ്മൾ സഞ്ചരിക്കും. Awk-ൽ നിങ്ങൾക്ക് രണ്ട് തരം വേരിയബിളുകൾ ഉപയോഗിക്കാം, ഇവയാണ്; ഉപയോക്തൃ-നിർവചിച്ച വേരിയബിളുകൾ, ഞങ്ങൾ ഭാഗം 8-ലും ബിൽറ്റ്-ഇൻ വേരിയബിളുകളിലും ഉൾപ്പെടുത്തിയിട്ടുണ്ട്.

ബിൽറ്റ്-ഇൻ വേരിയബിളുകൾക്ക് Awk-ൽ ഇതിനകം നിർവചിച്ച മൂല്യങ്ങളുണ്ട്, എന്നാൽ നമുക്ക് ആ മൂല്യങ്ങൾ ശ്രദ്ധാപൂർവ്വം മാറ്റാനും കഴിയും, ബിൽറ്റ്-ഇൻ വേരിയബിളുകളിൽ ഇവ ഉൾപ്പെടുന്നു:

  1. FILENAME : നിലവിലെ ഇൻപുട്ട് ഫയലിന്റെ പേര്( വേരിയബിൾ പേര് മാറ്റരുത്)
  2. FR : നിലവിലെ ഇൻപുട്ട് ലൈനിന്റെ നമ്പർ (അതായത് ഇൻപുട്ട് ലൈൻ 1, 2, 3... അങ്ങനെ, വേരിയബിളിന്റെ പേര് മാറ്റരുത്)
  3. NF : നിലവിലെ ഇൻപുട്ട് ലൈനിലെ ഫീൽഡുകളുടെ എണ്ണം (വേരിയബിൾ പേര് മാറ്റരുത്)
  4. OFS : ഔട്ട്പുട്ട് ഫീൽഡ് സെപ്പറേറ്റർ
  5. FS : ഇൻപുട്ട് ഫീൽഡ് സെപ്പറേറ്റർ
  6. ORS : ഔട്ട്uപുട്ട് റെക്കോർഡ് സെപ്പറേറ്റർ
  7. RS : ഇൻപുട്ട് റെക്കോർഡ് സെപ്പറേറ്റർ

മുകളിലുള്ള ചില Awk ബിൽറ്റ്-ഇൻ വേരിയബിളുകളുടെ ഉപയോഗം ചിത്രീകരിക്കാൻ നമുക്ക് മുന്നോട്ട് പോകാം:

നിലവിലെ ഇൻപുട്ട് ഫയലിന്റെ ഫയൽനാമം വായിക്കാൻ, നിങ്ങൾക്ക് FILENAME ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഇനിപ്പറയുന്ന രീതിയിൽ ഉപയോഗിക്കാം:

$ awk ' { print FILENAME } ' ~/domains.txt 

നിങ്ങൾ FILENAME ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഉപയോഗിക്കുമ്പോൾ, ഓരോ ഇൻപുട്ട് ലൈനിനും ഫയലിന്റെ പേര് പ്രിന്റ് ഔട്ട് ചെയ്തിട്ടുണ്ടെന്ന് നിങ്ങൾക്ക് മനസ്സിലാകും.

ഒരു ഇൻപുട്ട് ഫയലിലെ വരികളുടെ (റെക്കോർഡുകൾ) എണ്ണാൻ NR ഉപയോഗിച്ച്, ഓർക്കുക, താഴെയുള്ള ഉദാഹരണത്തിൽ നമ്മൾ കാണുന്നത് പോലെ, അത് ശൂന്യമായ വരികളും കണക്കാക്കുന്നു.

cat കമാൻഡ് ഉപയോഗിച്ച് നമ്മൾ domains.txt ഫയൽ കാണുമ്പോൾ, അതിൽ 14 വരികളും ടെക്uസ്uറ്റും ശൂന്യമായ 2 വരികളും അടങ്ങിയിരിക്കുന്നു:

$ cat ~/domains.txt
$ awk ' END { print "Number of records in file is: ", NR } ' ~/domains.txt 

ഒരു റെക്കോർഡിലോ ലൈനിലോ ഉള്ള ഫീൽഡുകളുടെ എണ്ണം കണക്കാക്കാൻ, ഞങ്ങൾ NR ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഇനിപ്പറയുന്ന രീതിയിൽ ഉപയോഗിക്കുന്നു:

$ cat ~/names.txt
$ awk '{ print "Record:",NR,"has",NF,"fields" ; }' ~/names.txt

അടുത്തതായി, നിങ്ങൾക്ക് FS ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഉപയോഗിച്ച് ഒരു ഇൻപുട്ട് ഫീൽഡ് സെപ്പറേറ്റർ വ്യക്തമാക്കാനും കഴിയും, ഇത് Awk ഇൻപുട്ട് ലൈനുകളെ ഫീൽഡുകളായി വിഭജിക്കുന്നത് എങ്ങനെയെന്ന് നിർവചിക്കുന്നു.

FS എന്നതിനായുള്ള സ്ഥിര മൂല്യം സ്uപെയ്uസും ടാബും ആണ്, എന്നാൽ നമുക്ക് FS ന്റെ മൂല്യം ഏത് പ്രതീകത്തിലേക്കും മാറ്റാൻ കഴിയും, അതനുസരിച്ച് ഇൻപുട്ട് ലൈനുകൾ വിഭജിക്കാൻ Awk-നെ നിർദ്ദേശിക്കുന്നു.

ഇത് ചെയ്യുന്നതിന് രണ്ട് രീതികളുണ്ട്:

  1. FS ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഉപയോഗിക്കുന്നതാണ് ഒരു രീതി
  2. ഒപ്പം രണ്ടാമത്തേത് -F Awk ഓപ്ഷൻ അഭ്യർത്ഥിക്കുക എന്നതാണ്

ഒരു ലിനക്സ് സിസ്റ്റത്തിലെ /etc/passwd ഫയൽ പരിഗണിക്കുക, ഈ ഫയലിലെ ഫീൽഡുകൾ : പ്രതീകം ഉപയോഗിച്ച് വിഭജിച്ചിരിക്കുന്നു, അതിനാൽ നമുക്ക് ചില ഫീൽഡുകൾ ഫിൽട്ടർ ചെയ്യണമെങ്കിൽ പുതിയ ഇൻപുട്ട് ഫീൽഡ് സെപ്പറേറ്ററായി ഇത് വ്യക്തമാക്കാം. ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങളിലെന്നപോലെ:

നമുക്ക് ഇനിപ്പറയുന്ന രീതിയിൽ -F ഓപ്ഷൻ ഉപയോഗിക്കാം:

$ awk -F':' '{ print $1, $4 ;}' /etc/passwd

ഓപ്ഷണലായി, ചുവടെയുള്ള FS ബിൽറ്റ്-ഇൻ വേരിയബിളും നമുക്ക് പ്രയോജനപ്പെടുത്താം:

$ awk ' BEGIN {  FS=“:” ; }  { print $1, $4  ; } ' /etc/passwd

ഒരു ഔട്ട്uപുട്ട് ഫീൽഡ് സെപ്പറേറ്റർ വ്യക്തമാക്കുന്നതിന്, OFS ബിൽറ്റ്-ഇൻ വേരിയബിൾ ഉപയോഗിക്കുക, ചുവടെയുള്ള ഉദാഹരണത്തിൽ നമ്മൾ ഉപയോഗിക്കുന്ന പ്രതീകം ഉപയോഗിച്ച് ഔട്ട്uപുട്ട് ഫീൽഡുകൾ എങ്ങനെ വേർതിരിക്കുമെന്ന് ഇത് നിർവചിക്കുന്നു:

$ awk -F':' ' BEGIN { OFS="==>" ;} { print $1, $4 ;}' /etc/passwd

ഈ ഭാഗം 10-ൽ, മുൻകൂട്ടി നിശ്ചയിച്ച മൂല്യങ്ങളോടെ വരുന്ന Awk ബിൽറ്റ്-ഇൻ വേരിയബിളുകൾ ഉപയോഗിക്കുന്നതിനുള്ള ആശയം ഞങ്ങൾ പര്യവേക്ഷണം ചെയ്തിട്ടുണ്ട്. എന്നാൽ ഞങ്ങൾക്ക് ഈ മൂല്യങ്ങൾ മാറ്റാനും കഴിയും, എന്നിരുന്നാലും, വേണ്ടത്ര ധാരണയോടെ നിങ്ങൾ എന്താണ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്കറിയില്ലെങ്കിൽ അങ്ങനെ ചെയ്യാൻ ശുപാർശ ചെയ്യുന്നില്ല.

ഇതിനുശേഷം, Awk കമാൻഡ് ഓപ്പറേഷനുകളിൽ ഷെൽ വേരിയബിളുകൾ എങ്ങനെ ഉപയോഗിക്കാമെന്നത് കവർ ചെയ്യാൻ ഞങ്ങൾ പുരോഗമിക്കും, അതിനാൽ, Tecmint-മായി ബന്ധം നിലനിർത്തുക.