ലിനക്സിൽ കോളം കമാൻഡ് ഉപയോഗിക്കുന്നതിനുള്ള വ്യത്യസ്ത വഴികൾ
നിങ്ങൾ എപ്പോഴെങ്കിലും CSV ഫയലുകൾക്കൊപ്പം പ്രവർത്തിക്കാനും ഘടനാപരമായ പട്ടിക ഫോർമാറ്റിൽ ഔട്ട്പുട്ട് നിർമ്മിക്കാനുമുള്ള സാഹചര്യം ഉണ്ടായിട്ടുണ്ടോ? ഈയിടെ ഞാൻ ശരിയായ ഘടനയിൽ ഇല്ലാത്ത ഒരു ഫയലിൽ ഡാറ്റ ക്ലീൻസിംഗുമായി പ്രവർത്തിക്കുകയായിരുന്നു. ഓരോ നിരയ്uക്കുമിടയിൽ ഇതിന് ധാരാളം വൈറ്റ്uസ്uപെയ്uസുകളുണ്ട്, ഡാറ്റാബേസിലേക്ക് തള്ളുന്നതിന് ഞാൻ അതിനെ CSV ഫോർമാറ്റിലേക്ക് പരിവർത്തനം ചെയ്യേണ്ടതുണ്ട്. CSV ഫോർമാറ്റിൽ ഔട്ട്uപുട്ട് വൃത്തിയാക്കി സൃഷ്uടിച്ച ശേഷം, CSV ഫയലിലെ ഡാറ്റാ സമഗ്രത പരിശോധിക്കാൻ എന്റെ ഔട്ട്uപുട്ട് ദൃശ്യപരമായി ആകർഷകമല്ല. \കോളം കമാൻഡ് എനിക്ക് ഉപയോഗപ്രദമാകുന്ന സമയമാണിത്.
manpage അനുസരിച്ച്, കോളം കമാൻഡ് \columnate lists. ലളിതമായ വാക്കുകളിൽ, കോളം എന്നത് നിങ്ങളുടെ ഉറവിട ഫയലിന്റെ ഘടനയെ അടിസ്ഥാനമാക്കി ഒരു കോളം ഫോർമാറ്റിലേക്ക് (വരികൾ, ഫീൽഡുകൾ) നിങ്ങളുടെ ഔട്ട്uപുട്ട് ഫോർമാറ്റ് ചെയ്യാൻ കഴിയുന്ന ഒരു ലളിതമായ യൂട്ടിലിറ്റിയാണ്. കോളം കമാൻഡ് ആണ് util-linux പാക്കേജിന്റെ ഭാഗം.
ഇവിടെ ശ്രദ്ധിക്കേണ്ട ഒരു പ്രധാന കാര്യം, ഇതിനെ കുറിച്ച് കൂടുതൽ അറിയാൻ ബഗ് റിപ്പോർട്ടിൽ കോളം കമാൻഡ് വ്യത്യസ്തമായി പ്രവർത്തിക്കുന്നു എന്നതാണ്.
$ dpkg -S $(which column)
ഡെമോൺസ്uട്രേഷൻ ആവശ്യങ്ങൾക്കായി, ഞാൻ CentOS 7 ഉപയോഗിക്കുന്നു, ഉബുണ്ടുവിനും CentOS 7 നും ഇടയിൽ വ്യത്യസ്ത ഓപ്ഷനുകൾ കാണിക്കും. കോളം പതിപ്പ് പരിശോധിക്കുന്നതിന് ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിക്കുക. ഈ കമാൻഡ് util-linux പാക്കേജ് പതിപ്പും കാണിക്കും.
$ column --version # will not work in Debian/ubuntu
ചുവടെയുള്ള കമാൻഡുകൾ പ്രവർത്തിപ്പിച്ച് നിങ്ങൾക്ക് util-linux-ന്റെ പതിപ്പും പരിശോധിക്കാവുന്നതാണ്.
$ rpm -qa | grep -i util-linux # Redhat,Centos,Fedora,Amazon Linux $ dpkg -l | grep -i util-linux # Ubuntu
കോളം കമാൻഡ് ഉപയോഗിക്കുന്നതിന് മുമ്പ്, ആരംഭിക്കാനുള്ള നല്ലൊരു സ്ഥലം മാൻ പേജ് ആയിരിക്കും, അതിന്റെ ഓപ്ഷനുകൾ പര്യവേക്ഷണം ചെയ്യുക.
$ man column
ടാബുലാർ ഫോർമാറ്റിൽ ഫയൽ ഉള്ളടക്കം ലിസ്റ്റ് ചെയ്യുക
-t
ഫ്ലാഗിനൊപ്പം ഫയലിന്റെ പേര് ഒരു ആർഗ്യുമെന്റായി നൽകി കോളം കമാൻഡിന് ഒരു പട്ടിക സൃഷ്ടിക്കാൻ കഴിയും. ഞാൻ /etc/passwd ഇൻപുട്ട് ഫയലായി ഉപയോഗിക്കുന്നു.
$ column -t /etc/passwd
മുകളിലെ ചിത്രം നോക്കുമ്പോൾ, ഇത് ഞങ്ങൾ പ്രതീക്ഷിച്ചതല്ലെന്ന് നിങ്ങൾക്ക് തോന്നിയേക്കാം, ഔട്ട്പുട്ട് വിചിത്രമായി തോന്നാം. അതെ! നിങ്ങൾ പറഞ്ഞത് ശരിയാണ്. ഒരു പട്ടിക സൃഷ്ടിക്കുമ്പോൾ കോളങ്ങൾ സ്uപെയ്uസ് ഡിഫോൾട്ട് ഡിലിമിറ്ററായി കണക്കാക്കുന്നു. ഒരു ഇഷ്uടാനുസൃത ഡിലിമിറ്റർ കടന്നുപോകുന്നതിലൂടെ ഈ സ്വഭാവം അസാധുവാക്കാനാകും.
കസ്റ്റം ഡിലിമീറ്റർ
ഇഷ്uടാനുസൃത ഡിലിമിറ്ററുകൾ നിങ്ങൾക്ക് പ്രവർത്തിക്കാനുള്ള വിശാലമായ ഓപ്ഷനുകൾ നൽകുന്നു. ഒരു ഇഷ്uടാനുസൃത ഡിലിമിറ്റർ സൃഷ്uടിക്കാൻ -s
ഫ്ലാഗ് തുടർന്ന് ഒരു ഡിലിമിറ്റർ ഉപയോഗിക്കുക. ഇപ്പോൾ നമ്മൾ /etc/passwd ഫയൽ വിഭജിക്കാൻ ഒരു ഡിലിമിറ്ററായി \:”
ഉപയോഗിക്കും.
$ column -s ":" -t /etc/passwd
മുകളിലെ ചിത്രം നോക്കുക, അവിടെ പട്ടിക മനോഹരമായി ഫോർമാറ്റ് ചെയ്തതും ഘടനാപരവുമാണ്. util-linux പതിപ്പ് 2.23-ൽ നിന്ന് -s
എന്ന ഓപ്ഷൻ അത്യാഗ്രഹമല്ല എന്നാക്കി മാറ്റി.
ഇപ്പോൾ അതേ കമാൻഡ് ഉബുണ്ടുവിൽ പ്രവർത്തിപ്പിക്കുക, ഫലം അത്യാഗ്രഹമായിരിക്കും. കാരണം ഉബുണ്ടുവിലെ കോളം കമാൻഡ് (bsdmainutils) ഒന്നിലധികം അടുത്ത പദങ്ങളെ ഒരൊറ്റ വാക്കായി കണക്കാക്കും.
$ column -s ":" -t /etc/passwd
ഈ സ്വഭാവം മറികടക്കാൻ -n
ഫ്ലാഗ് ഉപയോഗിക്കുക.
$ column -t -s ":" -n /etc/passwd # Only on Debian/Ubuntu
ഫയൽ ഔട്ട്പുട്ടിൽ വൈറ്റ് എംപ്റ്റി ലൈനുകൾ അവഗണിക്കുക
നിങ്ങളുടെ ഇൻപുട്ട് ഫയലിൽ ശൂന്യമായ വരികൾ ഉണ്ടെങ്കിൽ, സ്ഥിരസ്ഥിതിയായി കോളം കമാൻഡ് അത് അവഗണിക്കുന്നു. CSV ഫോർമാറ്റിലുള്ള എന്റെ ഇൻപുട്ട് ഫയൽ കാണുക, എല്ലാ വരികൾക്കിടയിലും ഞാൻ ഒരു ശൂന്യമായ വരി ചേർത്തു. ഈ ഇൻപുട്ട് ഫയൽ ഉപയോഗിച്ച് മുമ്പ് ചെയ്തതുപോലെ ഇപ്പോൾ നമുക്ക് ഒരു പട്ടിക ഉണ്ടാക്കാം.
$ column -t -s ";" dummy.txt
മുകളിലെ ചിത്രത്തിൽ നിന്ന് എന്റെ ഇൻപുട്ട് ഫയൽ dummy.txt ന് ശൂന്യമായ ലൈനുകളുണ്ടെന്നും ഞാൻ ഒരു ടേബിൾ സൃഷ്uടിക്കാൻ ശ്രമിക്കുമ്പോൾ, ശൂന്യമായ വരികൾ അവഗണിക്കപ്പെടുന്നതും നിങ്ങൾക്ക് കാണാൻ കഴിയും.
ശ്രദ്ധിക്കുക: കോളം കമാൻഡിന്റെ \bsdmainutils/util-linux വേരിയന്റിനുമുള്ള ഡിഫോൾട്ട് സ്വഭാവമാണിത്. എന്നാൽ കോളത്തിന് (bsdmainutils) -e
ഫ്ലാഗ് പാസ്സാക്കി ഈ സ്വഭാവം അസാധുവാക്കാനുള്ള ഓപ്ഷൻ ഉണ്ട്.
$ column -e -t -s "," dummy.txt # Only on Debian/Ubuntu
മുകളിലെ ചിത്രത്തിൽ നിന്ന്, പട്ടിക ശരിയായി ഫോർമാറ്റ് ചെയ്തിരിക്കുന്നതും ശൂന്യമായ വരികൾ അവഗണിക്കപ്പെടുന്നതും നിങ്ങൾക്ക് കാണാൻ കഴിയും.
ഫയൽ ഔട്ട്പുട്ട് സെപ്പറേറ്റർ
സ്ഥിരസ്ഥിതിയായി, രണ്ട് വൈറ്റ് സ്uപെയ്uസുകൾ ഔട്ട്uപുട്ട് സെപ്പറേറ്ററായി ഉപയോഗിക്കും. -o
ഫ്ലാഗ് പാസ്സാക്കി ഈ സ്വഭാവം അസാധുവാക്കാം. കോളത്തിൽ (bsdmainutils) നിങ്ങൾക്ക് ഒരു ഔട്ട്uപുട്ട് സെപ്പറേറ്റർ ഓപ്ഷൻ ലഭ്യമല്ല.
$ column -t -s "," -o "||" dummy.txt # Only on Rhel based distro
ഫയൽ വരികൾ നിരകളാക്കി മാറ്റുക
-x
ഫ്ലാഗ് ഉപയോഗിച്ച് നിങ്ങൾക്ക് വരികൾ നിരകളാക്കി മാറ്റാം. കോളം കമാൻഡിന്റെ rhel, ubuntu വേരിയന്റുകളിലും ഈ സ്വഭാവം സമാനമാണ്. awk അല്ലെങ്കിൽ കോളം കമാൻഡ് വഴി നിങ്ങൾക്ക് ഒരു നിശ്ചിത ഫീൽഡ് പിടിച്ചെടുക്കേണ്ടിവരുമ്പോൾ ഇത് വളരെ ഉപയോഗപ്രദമായ സവിശേഷതയാണ്, തുടർന്ന് അത് നിങ്ങളുടെ CSV ഫയലിനായുള്ള ഹെഡറിലേക്ക് പരിവർത്തനം ചെയ്യുക.
$ column -x fillcols.txt
നിങ്ങൾ ഫ്ലാഗുകളൊന്നും ഉപയോഗിക്കാതെ കോളം കമാൻഡ് പ്രവർത്തിപ്പിക്കുമ്പോൾ, പെരുമാറ്റം -x
ഫ്ലാഗ് കടന്നുപോകുന്നത് പോലെയായിരിക്കും.
നിരയുടെ വലുപ്പം കണ്ടെത്തുക
നിങ്ങളുടെ ടെർമിനലിന്റെ വലുപ്പം കണ്ടെത്താൻ കോളം ഒരു പരിസ്ഥിതി വേരിയബിൾ ($COLUMNS)
ഉപയോഗിക്കുന്നു, വലുപ്പത്തെ അടിസ്ഥാനമാക്കി എക്കോ കമാൻഡ് ഉപയോഗിക്കുക, ടെർമിനലിൽ പട്ടികയുടെ വലുപ്പം പ്രദർശിപ്പിക്കും.
$ echo $COLUMNS
താഴെയുള്ള ചിത്രം നോക്കൂ. തുടക്കത്തിൽ, എന്റെ ടെർമിനലിന്റെ വലുപ്പം $COLUMNS
ആയി 60 ആയി സജ്ജീകരിച്ച് കോളം കമാൻഡ് പ്രവർത്തിപ്പിച്ചു. ഞാൻ വീണ്ടും എന്റെ ടെർമിനലിന്റെ വലുപ്പം മാറ്റി $COLUMNS
വലിപ്പം 114 ആയി സജ്ജമാക്കി കോളം കമാൻഡ് വീണ്ടും പ്രവർത്തിപ്പിച്ചു. ഞങ്ങൾ ടെർമിനലിന്റെ വലുപ്പം മാറ്റുമ്പോൾ കോളം പട്ടികയെ എങ്ങനെ പ്രിന്റ് ചെയ്യുന്നു എന്നതിലെ വ്യത്യാസം നിങ്ങൾക്ക് കാണാൻ കഴിയും.
$ column -t -s ":" /etc/passwd | head 5
ഈ ലേഖനത്തിന് അത്രയേയുള്ളൂ. നിങ്ങൾക്ക് എന്തെങ്കിലും ഫീഡ്uബാക്ക് ഉണ്ടെങ്കിൽ അത് കമന്റ് സെക്ഷനിൽ നൽകുക.