Awk വേരിയബിളുകൾ, ന്യൂമെറിക് എക്സ്പ്രഷനുകൾ, അസൈൻമെന്റ് ഓപ്പറേറ്റർമാർ എന്നിവ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് മനസിലാക്കുക - ഭാഗം 8


Awk കമാൻഡ് സീരീസ് ആവേശഭരിതമാകുന്നു എന്ന് ഞാൻ വിശ്വസിക്കുന്നു, മുമ്പത്തെ ഏഴ് ഭാഗങ്ങളിൽ, Linux-ൽ ചില അടിസ്ഥാന ടെക്uസ്uറ്റുകളോ സ്uട്രിംഗ് ഫിൽട്ടറിംഗോ നടത്താൻ നിങ്ങളെ പ്രാപ്uതമാക്കാൻ നിങ്ങൾ മാസ്റ്റർ ചെയ്യേണ്ട Awk-ന്റെ ചില അടിസ്ഥാനകാര്യങ്ങളിലൂടെ ഞങ്ങൾ നടന്നു.

ഈ ഭാഗം മുതൽ, കൂടുതൽ സങ്കീർണ്ണമായ ടെക്uസ്uറ്റ് അല്ലെങ്കിൽ സ്uട്രിംഗ് ഫിൽട്ടറിംഗ് പ്രവർത്തനങ്ങൾ കൈകാര്യം ചെയ്യുന്നതിന് ഞങ്ങൾ Awk-ന്റെ മുൻകൂർ മേഖലകളിലേക്ക് നീങ്ങും. അതിനാൽ, വേരിയബിളുകൾ, ന്യൂമറിക് എക്സ്പ്രഷനുകൾ, അസൈൻമെന്റ് ഓപ്പറേറ്റർമാർ എന്നിവ പോലുള്ള Awk സവിശേഷതകൾ ഞങ്ങൾ കവർ ചെയ്യാൻ പോകുന്നു.

ഷെൽ, സി, പൈത്തൺ എന്നിവയ്uക്ക് മുമ്പ് നിങ്ങൾ പല പ്രോഗ്രാമിംഗ് ഭാഷകളിലും നേരിട്ടിരിക്കാനിടയുള്ള ആശയങ്ങളിൽ നിന്ന് ഈ ആശയങ്ങൾ സമഗ്രമായി വ്യത്യസ്uതമല്ല, അതിനാൽ ഈ വിഷയത്തെക്കുറിച്ച് കൂടുതൽ വിഷമിക്കേണ്ടതില്ല, ഉപയോഗിക്കുന്നതിനുള്ള പൊതുവായ ആശയങ്ങൾ ഞങ്ങൾ പരിഷ്കരിക്കുകയാണ്. ഈ സൂചിപ്പിച്ച സവിശേഷതകൾ.

ഇത് ഒരുപക്ഷേ മനസ്സിലാക്കാൻ എളുപ്പമുള്ള Awk കമാൻഡ് വിഭാഗങ്ങളിൽ ഒന്നായിരിക്കും, അതിനാൽ ഇരിക്കൂ, നമുക്ക് പോകാം.

1. Awk വേരിയബിളുകൾ

ഏതൊരു പ്രോഗ്രാമിംഗ് ഭാഷയിലും, വേരിയബിൾ എന്നത് ഒരു മൂല്യം സംഭരിക്കുന്ന ഒരു പ്ലേസ് ഹോൾഡറാണ്, നിങ്ങൾ ഒരു പ്രോഗ്രാം ഫയലിൽ ഒരു വേരിയബിൾ സൃഷ്ടിക്കുമ്പോൾ, ഫയൽ എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ, വേരിയബിളിനായി നിങ്ങൾ വ്യക്തമാക്കിയ മൂല്യം സംഭരിക്കുന്ന മെമ്മറിയിൽ കുറച്ച് ഇടം സൃഷ്ടിക്കപ്പെടുന്നു.

ഷെൽ വേരിയബിളുകൾ ഇനിപ്പറയുന്ന രീതിയിൽ നിർവ്വചിക്കുന്നതുപോലെ നിങ്ങൾക്ക് Awk വേരിയബിളുകൾ നിർവചിക്കാം:

variable_name=value 

മുകളിലുള്ള വാക്യഘടനയിൽ:

  1. variable_name: നിങ്ങൾ ഒരു വേരിയബിളിന് നൽകുന്ന പേരാണ്
  2. മൂല്യം: വേരിയബിളിൽ സംഭരിച്ചിരിക്കുന്ന മൂല്യം

താഴെ ചില ഉദാഹരണങ്ങൾ നോക്കാം:

computer_name=”linux-console.net”
port_no=”22”
email=”[email ”
server=”computer_name”

മുകളിലുള്ള ലളിതമായ ഉദാഹരണങ്ങൾ നോക്കുക, ആദ്യത്തെ വേരിയബിൾ നിർവചനത്തിൽ, linux-console.net എന്ന മൂല്യം computer_name എന്ന വേരിയബിളിന് നൽകിയിരിക്കുന്നു.

കൂടാതെ, 22 എന്ന മൂല്യം port_no എന്ന വേരിയബിളിന് നൽകിയിട്ടുണ്ട്, ഞങ്ങൾ മൂല്യം നൽകിയ അവസാന ഉദാഹരണത്തിലെന്നപോലെ ഒരു വേരിയബിളിന്റെ മൂല്യം മറ്റൊരു വേരിയബിളിലേക്ക് അസൈൻ ചെയ്യാനും സാധിക്കും. വേരിയബിൾ സെർവറിലേക്ക് computer_name.

നിങ്ങൾക്ക് ഓർക്കാൻ കഴിയുമെങ്കിൽ, ഈ Awk സീരീസിന്റെ ഭാഗം 2 മുതൽ ഞങ്ങൾ ഫീൽഡ് എഡിറ്റിംഗ് കവർ ചെയ്തിരുന്നതായി ഞങ്ങൾ സംസാരിച്ചു, Awk എങ്ങനെയാണ് ഇൻപുട്ട് ലൈനുകളെ ഫീൽഡുകളായി വിഭജിക്കുന്നതെന്നും വ്യത്യസ്ത ഫീൽഡുകൾ വായിക്കാൻ സ്റ്റാൻഡേർഡ് ഫീൽഡ് ആക്uസസ് ഓപ്പറേറ്ററായ $ ഉപയോഗിക്കുന്നുവെന്നും ഞങ്ങൾ സംസാരിച്ചു. പാഴ്uസ് ചെയ്തിട്ടുണ്ട്. ഫീൽഡുകളുടെ മൂല്യങ്ങൾ ഇനിപ്പറയുന്ന രീതിയിൽ സംഭരിക്കാൻ നമുക്ക് വേരിയബിളുകളും ഉപയോഗിക്കാം.

first_name=$2
second_name=$3

മുകളിലുള്ള ഉദാഹരണങ്ങളിൽ, first_name എന്നതിന്റെ മൂല്യം രണ്ടാമത്തെ ഫീൽഡിലേക്കും second_name മൂന്നാം ഫീൽഡിലേക്കും സജ്ജീകരിച്ചിരിക്കുന്നു.

ഒരു ചിത്രീകരണമെന്ന നിലയിൽ, names.txt എന്ന പേരിൽ ഒരു ഫയൽ പരിഗണിക്കുക, അതിൽ ഒരു ആപ്ലിക്കേഷന്റെ ഉപയോക്താക്കളുടെ പേരുകളും പേരുകളും ലിംഗഭേദവും സൂചിപ്പിക്കുന്ന ഒരു ലിസ്റ്റ് അടങ്ങിയിരിക്കുന്നു. cat കമാൻഡ് ഉപയോഗിച്ച്, നമുക്ക് ഫയലിന്റെ ഉള്ളടക്കം ഇനിപ്പറയുന്ന രീതിയിൽ കാണാൻ കഴിയും:

$ cat names.txt

തുടർന്ന്, ചുവടെയുള്ള Awk കമാൻഡ് പ്രവർത്തിപ്പിക്കുന്നതിലൂടെ ലിസ്റ്റിലെ ആദ്യ ഉപയോക്താവിന്റെ ആദ്യത്തെയും രണ്ടാമത്തെയും പേരുകൾ സംഭരിക്കുന്നതിന് first_name, second_name എന്നീ വേരിയബിളുകളും നമുക്ക് ഉപയോഗിക്കാം:

$ awk '/Aaron/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' names.txt

നമുക്ക് മറ്റൊരു കേസ് കൂടി നോക്കാം, നിങ്ങളുടെ ടെർമിനലിൽ നിങ്ങൾ uname -a കമാൻഡ് നൽകുമ്പോൾ, അത് നിങ്ങളുടെ എല്ലാ സിസ്റ്റം വിവരങ്ങളും പ്രിന്റ് ചെയ്യുന്നു.

രണ്ടാമത്തെ ഫീൽഡിൽ നിങ്ങളുടെ hostname അടങ്ങിയിരിക്കുന്നു, അതിനാൽ ഞങ്ങൾക്ക് ഹോസ്റ്റ്നാമം hostname എന്ന വേരിയബിളിൽ സംഭരിക്കാനും Awk ഉപയോഗിച്ച് ഇനിപ്പറയുന്ന രീതിയിൽ പ്രിന്റ് ചെയ്യാനും കഴിയും:

$ uname -a
$ uname -a | awk '{hostname=$2 ; print hostname ; }' 

2. സംഖ്യാ പദപ്രയോഗങ്ങൾ

Awk-ൽ, ഇനിപ്പറയുന്ന സംഖ്യാ ഓപ്പറേറ്റർമാർ ഉപയോഗിച്ചാണ് സംഖ്യാ പദപ്രയോഗങ്ങൾ നിർമ്മിച്ചിരിക്കുന്നത്:

  1. * : ഗുണന ഓപ്പറേറ്റർ
  2. + : കൂട്ടിച്ചേർക്കൽ ഓപ്പറേറ്റർ
  3. / : ഡിവിഷൻ ഓപ്പറേറ്റർ
  4. - : കുറയ്ക്കൽ ഓപ്പറേറ്റർ
  5. % : മോഡുലസ് ഓപ്പറേറ്റർ
  6. ^ : എക്സ്പോണൻഷ്യേഷൻ ഓപ്പറേറ്റർ

ഒരു സംഖ്യാ പദപ്രയോഗങ്ങൾക്കുള്ള വാക്യഘടന ഇതാണ്:

$ operand1 operator operand2

മുകളിലുള്ള ഫോമിൽ, operand1, operand2 എന്നിവ നമ്പറുകളോ വേരിയബിൾ പേരുകളോ ആകാം, കൂടാതെ operator എന്നത് മുകളിലെ ഏതെങ്കിലും ഓപ്പറേറ്റർമാരാണ്.

സംഖ്യാ പദപ്രയോഗങ്ങൾ എങ്ങനെ നിർമ്മിക്കാമെന്ന് തെളിയിക്കുന്നതിനുള്ള ചില ഉദാഹരണങ്ങൾ ചുവടെയുണ്ട്:

counter=0
num1=5
num2=10
num3=num2-num1
counter=counter+1

Awk-ലെ സംഖ്യാ പദപ്രയോഗങ്ങളുടെ ഉപയോഗം മനസ്സിലാക്കാൻ, Tecmint-ന്റെ ഉടമസ്ഥതയിലുള്ള എല്ലാ ഡൊമെയ്uനുകളും അടങ്ങുന്ന domains.txt എന്ന ഫയൽ ഉപയോഗിച്ച് ഞങ്ങൾ ഇനിപ്പറയുന്ന ഉദാഹരണം പരിഗണിക്കും.

news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
linux-console.net
news.linux-console.net
linux-console.net
linuxsay.com
windows.linux-console.net
linux-console.net

ഫയലിന്റെ ഉള്ളടക്കങ്ങൾ കാണുന്നതിന്, താഴെയുള്ള കമാൻഡ് ഉപയോഗിക്കുക:

$ cat domains.txt

ഫയലിൽ linux-console.net എന്ന ഡൊമെയ്ൻ എത്ര തവണ ദൃശ്യമാകുന്നു എന്ന് നമുക്ക് കണക്കാക്കണമെങ്കിൽ, അത് ഇനിപ്പറയുന്ന രീതിയിൽ ചെയ്യാൻ നമുക്ക് ഒരു ലളിതമായ സ്ക്രിപ്റ്റ് എഴുതാം:

#!/bin/bash
for file in [email ; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

സ്uക്രിപ്റ്റ് സൃഷ്uടിച്ച ശേഷം, അത് സംരക്ഷിച്ച് എക്uസിക്യൂട്ടബിൾ ആക്കുക, domains.txt എന്ന ഫയൽ ഉപയോഗിച്ച് ഔട്ട് ഇൻപുട്ടായി പ്രവർത്തിപ്പിക്കുമ്പോൾ, നമുക്ക് ഇനിപ്പറയുന്ന ഔട്ട്uപുട്ട് ലഭിക്കും:

$ ./script.sh  ~/domains.txt

സ്uക്രിപ്uറ്റിന്റെ ഔട്ട്uപുട്ടിൽ നിന്ന്, domains.txt ഫയലിൽ 6 വരികൾ ഉണ്ട്, അതിൽ linux-console.net നിങ്ങൾക്ക് സ്വമേധയാ എണ്ണാൻ കഴിയുമെന്ന് സ്ഥിരീകരിക്കുന്നു.

3. അസൈൻമെന്റ് ഓപ്പറേറ്റർമാർ

ഞങ്ങൾ കവർ ചെയ്യുന്ന അവസാനത്തെ Awk ഫീച്ചർ അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരാണ്, Awk-ൽ നിരവധി അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരുണ്ട്, ഇവയിൽ ഇനിപ്പറയുന്നവ ഉൾപ്പെടുന്നു:

  1. *= : ഗുണന അസൈൻമെന്റ് ഓപ്പറേറ്റർ
  2. += : കൂട്ടിച്ചേർക്കൽ അസൈൻമെന്റ് ഓപ്പറേറ്റർ
  3. /= : ഡിവിഷൻ അസൈൻമെന്റ് ഓപ്പറേറ്റർ
  4. -= : സബ്uട്രാക്ഷൻ അസൈൻമെന്റ് ഓപ്പറേറ്റർ
  5. %= : മോഡുലസ് അസൈൻമെന്റ് ഓപ്പറേറ്റർ
  6. ^= : എക്സ്പോണൻഷ്യേഷൻ അസൈൻമെന്റ് ഓപ്പറേറ്റർ

Awk-ലെ ഒരു അസൈൻമെന്റ് പ്രവർത്തനത്തിന്റെ ഏറ്റവും ലളിതമായ വാക്യഘടന ഇപ്രകാരമാണ്:

$ variable_name=variable_name operator operand

ഉദാഹരണങ്ങൾ:

counter=0
counter=counter+1

num=20
num=num-1

Awk-ലെ അസൈൻമെന്റ് പ്രവർത്തനങ്ങൾ ചെറുതാക്കാൻ നിങ്ങൾക്ക് മുകളിലുള്ള അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരെ ഉപയോഗിക്കാം, മുമ്പത്തെ ഉദാഹരണങ്ങൾ പരിഗണിക്കുക, ഇനിപ്പറയുന്ന ഫോമിൽ ഞങ്ങൾക്ക് അസൈൻമെന്റ് നടത്താം:

variable_name operator=operand
counter=0
counter+=1

num=20
num-=1

അതിനാൽ, += അസൈൻമെന്റ് ഓപ്പറേറ്റർ ഉപയോഗിച്ച് ഞങ്ങൾ മുകളിൽ എഴുതിയ ഷെൽ സ്ക്രിപ്റ്റിലെ Awk കമാൻഡ് ഇനിപ്പറയുന്ന രീതിയിൽ മാറ്റാം:

#!/bin/bash
for file in [email ; do
        if [ -f $file ] ; then
                #print out filename
                echo "File is: $file"
                #print a number incrementally for every line containing linux-console.net 
                awk  '/^linux-console.net/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
        else
                #print error info incase input is not a file
                echo "$file is not a file, please specify a file." >&2 && exit 1
        fi
done
#terminate script with exit code 0 in case of successful execution 
exit 0

Awk സീരീസിന്റെ ഈ സെഗ്uമെന്റിൽ, ഞങ്ങൾ ചില ശക്തമായ Awk ഫീച്ചറുകൾ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, അതായത് വേരിയബിളുകൾ, ന്യൂമറിക് എക്uസ്uപ്രഷനുകൾ നിർമ്മിക്കുക, അസൈൻമെന്റ് ഓപ്പറേറ്റർമാരുടെ ഉപയോഗം എന്നിവയും അവ എങ്ങനെ ഉപയോഗിക്കാം എന്നതിന്റെ ചില ചിത്രീകരണങ്ങളും.

ഈ ആശയങ്ങൾ മറ്റ് പ്രോഗ്രാമിംഗ് ഭാഷകളിൽ നിന്ന് വ്യത്യസ്തമല്ല, എന്നാൽ Awk പ്രോഗ്രാമിംഗിൽ ചില പ്രധാന വ്യത്യാസങ്ങൾ ഉണ്ടായേക്കാം.

ഭാഗം 9-ൽ, പ്രത്യേക പാറ്റേണുകളുള്ള കൂടുതൽ Awk സവിശേഷതകൾ ഞങ്ങൾ നോക്കും: BEGIN, END. അതുവരെ, Tecmint-മായി ബന്ധം നിലനിർത്തുക.