Научете како да користите Awk променливи, нумерички изрази и оператори за доделување - Дел 8


Серијата команди Awk станува возбудлива, верувам, во претходните седум делови, поминавме низ некои основи на Awk што треба да ги совладате за да ви овозможите да извршите основно филтрирање на текст или низа во Linux.

Почнувајќи од овој дел, ќе се нурнеме во напредните области на Awk за да се справиме со посложени операции за филтрирање на текст или низа. Затоа, ќе ги покриеме карактеристиките на Awk како што се променливи, нумерички изрази и оператори за доделување.

Овие концепти не се целосно различни од оние што веројатно сте ги сретнале во многу програмски јазици пред таквата школка, C, Python плус многу други, така што нема потреба многу да се грижите за оваа тема, ние едноставно ги ревидираме вообичаените идеи за користење овие споменати карактеристики.

Ова веројатно ќе биде еден од најлесните секции на командата на Awk за разбирање, па затоа седнете и ајде да тргнеме.

1. Awk променливи

Во кој било програмски јазик, променливата е држач за место што зачувува вредност, кога креирате променлива во програмска датотека, додека датотеката се извршува, се создава одреден простор во меморијата што ќе ја зачува вредноста што ја наведовте за променливата.

Можете да ги дефинирате променливите Awk на ист начин како што ги дефинирате променливите на школка на следниов начин:

variable_name=value 

Во синтаксата погоре:

  1. име на променлива: е името што го давате на променливата
  2. вредност: вредноста зачувана во променливата

Ајде да погледнеме неколку примери подолу:

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

Погледнете ги едноставните примери погоре, во првата дефиниција на променливата, вредноста linux-console.net е доделена на променливата име на_компјутер.

Понатаму, вредноста 22 е доделена на променливата port_no, исто така е можно да се додели вредноста на една променлива на друга променлива како во последниот пример каде што ја доделивме вредноста од име на_компјутер на променливиот сервер.

Ако се сеќавате, веднаш од вториот дел од оваа серија Awk кога го опфативме уредувањето на теренот, разговаравме за тоа како Awk ги дели влезните линии на полиња и користи стандарден оператор за пристап до поле, $ за да ги прочита различните полиња што се анализирани. Можеме да користиме и променливи за складирање на вредностите на полињата на следниов начин.

first_name=$2
second_name=$3

Во горните примери, вредноста на first_name е поставена на второто поле и second_name е поставена на третото поле.

Како илустрација, земете ја датотеката со име names.txt која содржи список на корисници на апликацијата што ги наведува нивните имиња и презимиња плус пол. Користејќи ја командата cat, можеме да ја видиме содржината на датотеката на следниов начин:

$ cat names.txt

Потоа, можеме да ги користиме и променливите first_name и second_name за да ги зачуваме првото и второто име на првиот корисник на списокот како со извршување на командата Awk подолу:

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

Дозволете ни да погледнеме и во друг случај, кога ќе ја издадете командата uname -a на вашиот терминал, тој ги отпечатува сите ваши системски информации.

Второто поле го содржи вашето име на домаќин, затоа можеме да го складираме името на домаќинот во променлива наречена име на домаќин и да го испечатиме користејќи Awk на следниов начин:

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

2. Нумерички изрази

Во Awk, нумеричките изрази се градат со користење на следните нумерички оператори:

  1. * : оператор за множење
  2. + : оператор за собирање
  3. / : оператор за поделба
  4. - : оператор за одземање
  5. % : оператор на модул
  6. ^ : оператор за степенување

Синтаксата за нумерички изрази е:

$ operand1 operator operand2

Во формата погоре, operand1 и operand2 може да бидат броеви или имиња на променливи, а operand е кој било од операторите погоре.

Подолу се дадени неколку примери за да се покаже како да се градат нумерички изрази:

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

За да ја разбереме употребата на нумерички изрази во Awk, ќе го разгледаме следниов пример подолу, со датотеката domains.txt која ги содржи сите домени во сопственост на Tecmint.

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

По креирањето на скриптата, зачувајте ја и направете ја извршна, кога ќе ја извршиме со датотеката, domains.txt како излез, го добиваме следниот излез:

$ ./script.sh  ~/domains.txt

Од излезот на скриптата, има 6 линии во датотеката domains.txt кои содржат linux-console.net, за да потврдите дека можете рачно да ги броите.

3. Оператори за доделување

Последната карактеристика на Awk што ќе ја покриеме се оператори за доделување, постојат неколку оператори за доделување во Awk и тие го вклучуваат следново:

  1. *= : оператор за доделување множење
  2. += : оператор за доделување собирање
  3. /= : оператор за доделување на поделба
  4. -= : оператор за доделување одземање
  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, опфативме некои моќни карактеристики на Awk, односно променливи, градење нумерички изрази и користење на оператори за доделување, плус неколку илустрации за тоа како всушност можеме да ги користиме.

Овие концепти не се разликуваат од оние во другите програмски јазици, но може да има некои значајни разлики во програмирањето Awk.

Во делот 9, ќе разгледаме повеќе функции на Awk кои се посебни шеми: BEGIN и END. Дотогаш, останете поврзани со Tecmint.