ഫയലിലെ ഫീൽഡുകളും കോളങ്ങളും പ്രിന്റ് ചെയ്യാൻ Awk എങ്ങനെ ഉപയോഗിക്കാം
ഞങ്ങളുടെ Linux Awk കമാൻഡ് സീരീസിന്റെ ഈ ഭാഗത്ത്, Awk-ന്റെ ഏറ്റവും പ്രധാനപ്പെട്ട സവിശേഷതകളിലൊന്ന് നമുക്ക് നോക്കാം, അത് ഫീൽഡ് എഡിറ്റിംഗ് ആണ്.
Awk അതിന് നൽകിയിട്ടുള്ള ഇൻപുട്ട് ലൈനുകളെ ഫീൽഡുകളായി സ്വയമേവ വിഭജിക്കുന്നുവെന്ന് അറിയുന്നത് നല്ലതാണ്, കൂടാതെ ഒരു ആന്തരിക ഫീൽഡ് സെപ്പറേറ്റർ ഉപയോഗിച്ച് മറ്റ് ഫീൽഡുകളിൽ നിന്ന് വേർതിരിക്കുന്ന പ്രതീകങ്ങളുടെ ഒരു കൂട്ടമായി ഒരു ഫീൽഡിനെ നിർവചിക്കാം.
നിങ്ങൾക്ക് Unix/Linux പരിചയമുണ്ടെങ്കിൽ അല്ലെങ്കിൽ ബാഷ് ഷെൽ പ്രോഗ്രാമിംഗ് നടത്തുകയാണെങ്കിൽ, ആന്തരിക ഫീൽഡ് സെപ്പറേറ്റർ (IFS) വേരിയബിൾ എന്താണെന്ന് നിങ്ങൾ അറിഞ്ഞിരിക്കണം. Awk-ലെ സ്ഥിരസ്ഥിതി IFS എന്നത് ടാബും സ്ഥലവുമാണ്.
Awk-ൽ ഫീൽഡ് വേർതിരിക്കൽ എന്ന ആശയം ഇങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്: ഒരു ഇൻപുട്ട് ലൈൻ നേരിടുമ്പോൾ, നിർവചിച്ചിരിക്കുന്ന IFS അനുസരിച്ച്, ആദ്യ സെറ്റ് പ്രതീകങ്ങൾ ഫീൽഡ് ഒന്ന് ആണ്, അത് $1 ഉപയോഗിച്ച് ആക്സസ് ചെയ്യപ്പെടുന്നു, രണ്ടാമത്തെ സെറ്റ് പ്രതീകങ്ങൾ ഫീൽഡ് രണ്ട് ആണ്. $2 ഉപയോഗിച്ച് ആക്uസസ് ചെയ്uതിരിക്കുന്നു, മൂന്നാമത്തെ സെറ്റ് പ്രതീകങ്ങൾ ഫീൽഡ് മൂന്ന് ആണ്, ഇത് $3 ഉപയോഗിച്ച് ആക്uസസ് ചെയ്uതിരിക്കുന്നു, തുടർന്ന് പ്രതീകങ്ങളുടെ അവസാന സെറ്റ് വരെ.
ഈ Awk ഫീൽഡ് എഡിറ്റിംഗ് നന്നായി മനസ്സിലാക്കാൻ, നമുക്ക് ചുവടെയുള്ള ഉദാഹരണങ്ങൾ നോക്കാം:
ഉദാഹരണം 1: ഞാൻ tecmintinfo.txt എന്ന ഒരു ടെക്സ്റ്റ് ഫയൽ സൃഷ്ടിച്ചു.
# vi tecmintinfo.txt # cat tecmintinfo.txt
തുടർന്ന് കമാൻഡ് ലൈനിൽ നിന്ന്, ചുവടെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് tecmintinfo.txt ഫയലിൽ നിന്ന് ആദ്യത്തെ, രണ്ടാമത്തെയും മൂന്നാമത്തെയും ഫീൽഡുകൾ പ്രിന്റ് ചെയ്യാൻ ഞാൻ ശ്രമിക്കുന്നു:
$ awk '//{print $1 $2 $3 }' tecmintinfo.txt TecMint.comisthe
മുകളിലെ ഔട്ട്uപുട്ടിൽ നിന്ന്, ആദ്യത്തെ മൂന്ന് ഫീൽഡുകളിൽ നിന്നുള്ള പ്രതീകങ്ങൾ നിർവചിച്ചിരിക്കുന്ന IFS-നെ അടിസ്ഥാനമാക്കിയാണ് പ്രിന്റ് ചെയ്തിരിക്കുന്നതെന്ന് നിങ്ങൾക്ക് കാണാം:
- \TecMint.com എന്ന ഫീൽഡ്
$1
ഉപയോഗിച്ച് ആക്സസ് ചെയ്യുന്നു. - \is ആയ ഫീൽഡ് രണ്ട്
$2
ഉപയോഗിച്ച് ആക്സസ് ചെയ്യുന്നു. - \the ആയ ഫീൽഡ് മൂന്ന്
$3
ഉപയോഗിച്ചാണ് ആക്സസ് ചെയ്യുന്നത്.
അച്ചടിച്ച ഔട്ട്uപുട്ടിൽ നിങ്ങൾ ശ്രദ്ധിച്ചിട്ടുണ്ടെങ്കിൽ, ഫീൽഡ് മൂല്യങ്ങൾ വേർതിരിക്കപ്പെടുന്നില്ല, ഡിഫോൾട്ടായി പ്രിന്റ് പെരുമാറുന്നത് ഇങ്ങനെയാണ്.
ഫീൽഡ് മൂല്യങ്ങൾക്കിടയിലുള്ള സ്പേസ് ഉപയോഗിച്ച് ഔട്ട്uപുട്ട് വ്യക്തമായി കാണുന്നതിന്, നിങ്ങൾ (,)
ഓപ്പറേറ്ററെ ഇനിപ്പറയുന്ന രീതിയിൽ ചേർക്കേണ്ടതുണ്ട്:
$ awk '//{print $1, $2, $3; }' tecmintinfo.txt TecMint.com is the
ശ്രദ്ധിക്കേണ്ടതും എപ്പോഴും ഓർമ്മിക്കേണ്ടതുമായ ഒരു കാര്യം, ഷെൽ സ്uക്രിപ്റ്റിംഗിലെ ഉപയോഗത്തിൽ നിന്ന് വ്യത്യസ്uതമാണ് Awk-ലെ ($)
.
ഷെൽ സ്uക്രിപ്റ്റിങ്ങിനു കീഴിലുള്ള ($)
എന്നത് വേരിയബിളുകളുടെ മൂല്യം ആക്uസസ് ചെയ്യാൻ ഉപയോഗിക്കുന്നു, അതേസമയം Awk ($)
എന്നത് ഒരു ഫീൽഡിലെ ഉള്ളടക്കങ്ങൾ ആക്uസസ് ചെയ്യുമ്പോൾ മാത്രമേ ഉപയോഗിക്കൂ, പക്ഷേ ആക്uസസ് ചെയ്യാൻ അല്ല വേരിയബിളുകളുടെ മൂല്യം.
ഉദാഹരണം 2: my_shoping.list എന്ന് വിളിക്കപ്പെടുന്ന ഒന്നിലധികം വരികൾ അടങ്ങിയ ഒരു ഫയൽ ഉപയോഗിച്ച് നമുക്ക് മറ്റൊരു ഉദാഹരണം നോക്കാം.
No Item_Name Unit_Price Quantity Price 1 Mouse #20,000 1 #20,000 2 Monitor #500,000 1 #500,000 3 RAM_Chips #150,000 2 #300,000 4 Ethernet_Cables #30,000 4 #120,000
ഷോപ്പിംഗ് ലിസ്റ്റിലെ ഓരോ ഇനത്തിന്റെയും Unit_Price
മാത്രം പ്രിന്റ് ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് പറയുക, നിങ്ങൾ താഴെയുള്ള കമാൻഡ് പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ട്:
$ awk '//{print $2, $3 }' my_shopping.txt Item_Name Unit_Price Mouse #20,000 Monitor #500,000 RAM_Chips #150,000 Ethernet_Cables #30,000
നിങ്ങളുടെ ഔട്ട്uപുട്ട് ഫോർമാറ്റ് ചെയ്യാൻ സഹായിക്കുന്ന ഒരു printf
കമാൻഡും Awk-നുണ്ട്, കാരണം മുകളിലെ ഔട്ട്uപുട്ട് വേണ്ടത്ര വ്യക്തമല്ലെന്ന് നിങ്ങൾക്ക് കാണാൻ കഴിയും.
Item_Name, Unit_Price എന്നിവയുടെ ഔട്ട്uപുട്ട് ഫോർമാറ്റ് ചെയ്യുന്നതിന് printf
ഉപയോഗിക്കുന്നു:
$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt Item_Name Unit_Price Mouse #20,000 Monitor #500,000 RAM_Chips #150,000 Ethernet_Cables #30,000
സംഗ്രഹം
ടെക്uസ്uറ്റോ സ്uട്രിംഗുകളോ ഫിൽട്ടർ ചെയ്യാൻ Awk ഉപയോഗിക്കുമ്പോൾ ഫീൽഡ് എഡിറ്റിംഗ് വളരെ പ്രധാനമാണ്, ഒരു ലിസ്റ്റിലെ കോളങ്ങളിൽ പ്രത്യേക ഡാറ്റ ലഭിക്കുന്നതിന് ഇത് നിങ്ങളെ സഹായിക്കുന്നു. ഷെൽ സ്uക്രിപ്റ്റിംഗിൽ നിന്ന് വ്യത്യസ്uതമാണ് Awk-ലെ ($)
ഓപ്പറേറ്ററിന്റെ ഉപയോഗം എന്നും ഓർക്കുക.
ലേഖനം നിങ്ങൾക്ക് സഹായകരമാണെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു, കൂടാതെ ആവശ്യമായ കൂടുതൽ വിവരങ്ങൾക്കും ചോദ്യങ്ങൾക്കും, നിങ്ങൾക്ക് അഭിപ്രായ വിഭാഗത്തിൽ ഒരു അഭിപ്രായം പോസ്റ്റുചെയ്യാനാകും.