Awk linux примеры for

How to use for loop in awk command

Loop is used to execute some statements multiple times. The iteration of the loop based on the termination condition or the number of the array elements. Three types of loops are supported by any programming language. For loop is one of them. For loop can be declared by two ways. Simple for loop contains three parts. And another for loop is for-in loop that is used to iterate any list of data or array. This tutorial shows the use of these two types of loops in awk command by using various examples.

Syntax:

First part is used to initialize the variable for starting for loop. The second part contains the termination condition to control the iteration of the loop and the loop will continue until the condition is true. The last part will increment or decrement the initialization variable based on the first part.

for-in loop is used to do those tasks where the number of iteration of the loop is not fixed. for-in loop is mainly used to parse an array or list of data. The loop reads each data from the array or list and stores the value to a variable in each iteration.

Example-1: Using simple for loop

A simple for loop is used in the following script. Here, counter variable is initialized by 10 and the loop will terminate when the value of counter is less than 5. The script will print the counter values from 10 to 5. Run the command from the terminal.

The following output will appear after executing the command.

Example-2: Using for-in loop to read an array

An array named Customer is declared in the following script where the customer’s id is set as an array index and the customer’s name is set as array value. for-in loop is used here to iterate each index from the array and print the customer’s name. Run the script from the terminal.

$ echo | awk ‘BEGIN Customer[«8953»] = «Ella binte Nazir»;
Customer[«3455»] = «Bruce Hyslop»;
Customer[«6335»] = «Isabella»;

>END < for (i in Customer)
print «The name of «, i, » is » ,Customer[i]
>’

The following output will appear after executing the script.

Example-3: Using nested for loop

When a for loop is declared under another for loop then it is called nested for loop. The outer loop that is used in this script will iterate for 2 times and the inner loop will iterate for 3 times. So, the print statement will execute for, (2X3=6) 6 times. Run the script from the terminal.

Читайте также:  Kali linux файловый сервер

The following output will appear after running the script.

Example-4: Using for loop with break statement

break statement is used in any loop to terminate the loop before reaching the termination condition based on the particular condition. In the following script, for loop will start from 3 and it will terminate when the value of i is greater than 20. But when the value of i will be equal to the variable num then the if condition will true and the loop will terminate for the break statement.

Here, if condition is false for four iterations when the value of i is 3,4,5 and 6. So, the following output is printed for the four iterations.

Example-5: Using for loop with continue statement

Continue statement is used in any loop to omit any statement based on any particular condition. An array named product is declared in the following script. for-in loop is used to iterate the array and check each value with “Office Software“. If the value matches then an unavailable message will print by omitting available message for continue statement, otherwise unavailable message will print. Run the script from the terminal.

$ echo | awk ‘BEGIN product[«1002″]=»Office Software»;
product[«1003″]=»Drawing Software»;
product[«1004″]=»HDD»;
product[«1005″]=»DVD»;> END < for (i in product) if(product[i] == "Office Software") print product[i]," is not available\n";
continue;
>
print product[i], » is available» ,»\n»;>>’

The following output will appear after running the script.

Example-6: Using for loop in awk file

Create a text file named sales.txt and add the following content to practice this example.

Create an awk file named cal_sal.awk with the following script to calculate the total sales amount of the file sales.txt. The second field contains the yearly sales amount in the file sales.txt. In the script, the sales array will store all values of the second field and sum variable is initialized with 0 to add all values of sales array. Next, for-in loop is used to iterate each element of the sales array and add the value with the sum variable. Lastly, print statement is used to print the value of sum variable to display the total sales amount.

{
sales [ i++ ] = $2 ;
sum = 0 ;
}
END {
for ( i in sales )
{
sum = sum +sales [ i ] ;
}
print «Total sales amount=» sum ;
}

Run the following command to execute the script of cal_sal.awk file.

There are 5 records in the sales.txt file and the sum of the sales amount is 409000 that is printed after executing the script.

Conclusion:

Different uses of for loop in awk command is tried to explain in this tutorial. Hope, the reader will get a clear idea on using for loop in awk script and able to use for loop properly in awk programming.

About the author

Fahmida Yesmin

I am a trainer of web programming courses. I like to write article or tutorial on various IT topics. I have a YouTube channel where many types of tutorials based on Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel etc. are published: Tutorials4u Help.

Читайте также:  Линукс сменить язык клавиатуры

Источник

Команда awk – примеры использования в Linux и Unix

В этом базовом руководстве вы узнаете самые основы команды awk , а также увидите некоторые способы её использования при работе с текстом, включая вывод содержимого файла, а также его конкретных столбцов, строк и слов по указанным критериям. Приступим!

Что это за команда awk?

AWK – это скриптовый язык, который полезен при работе в командной строке и широко применяется для обработки текста.

При использовании awk вы можете выбирать данные – один или более отдельных фрагментов текста – на основе заданного критерия. Например, с помощью awk можно выполнять поиск конкретного слова или шаблона во фрагменте текста, а также выбирать определённую строку/столбец в файле.

Базовый синтаксис awk

Простейшая форма команды awk подразумевает описание основного действия в одинарных кавычках и фигурных скобках с указанием после него целевого файла.

Когда вам нужно найти текст, соответствующий конкретному шаблону, или же конкретное слово в тексте, команда принимает следующий вид:

awk '/regex pattern/' your_file_name.txt

Создание образца файла

Для создания файла в командной строке используется команда touch . Например: touch filename.txt , где filename – это произвольное имя файла.

Затем можно с помощью команды open ( open filename.txt ) запустить обработчик текста вроде TextEdit, который позволит внести в файл нужное содержимое.

Предположим, у вас есть текстовый файл information.txt, содержащий данные, разделённые по столбцам.

Выглядеть этот файл может так:

firstName lastName age city ID Thomas Shelby 30 Rio 400 Omega Night 45 Ontario 600 Wood Tinker 54 Lisbon N/A Giorgos Georgiou 35 London 300 Timmy Turner 32 Berlin N/A

В приведённом примере мы видим по одному столбцу для
firstName , lastName , age , city и ID .

В любой момент можно просмотреть вывод содержимого вашего файла, выполнив cat text_file , где text_file представляет имя файла.

Вывод всего содержимого файла

Для вывода всего содержимого файла в качестве действия в фигурных скобках нужно указать print $0 .

Сработает эта команда аналогично ранее упомянутой cat .

firstName lastName age city ID Thomas Shelby 30 Rio 400 Omega Night 45 Ontario 600 Wood Tinker 54 Lisbon N/A Giorgos Georgiou 35 London 300 Timmy Turner 32 Berlin N/A

Если захотите добавить нумерацию строк, то нужно будет дополнить действие переменной NR :

1 firstName lastName age city ID 2 3 Thomas Shelby 30 Rio 400 4 Omega Night 45 Ontario 600 5 Wood Tinker 54 Lisbon N/A 6 Giorgos Georgiou 35 London 300 7 Timmy Turner 32 Berlin N/A

Вывод конкретных столбцов

При использовании awk можно указывать для вывода конкретные столбцы.

Вывод первого производится следующей командой:

Thomas Omega Wood Giorgos Timmy

Здесь $1 означает первое поле, то есть в данном случае первый столбец.

Для вывода второго столбца используется $2 :

lastName Shelby Night Tinker Georgiou Turner

По умолчанию начало и конец каждого столбца awk определяет по пробелу.

Для вывода большего числа столбцов, например, первого и четвёртого, нужно выполнить:

firstName city Thomas Rio Omega Ontario Wood Lisbon Giorgos London Timmy Berlin

Здесь $1 представляет первое поле ввода (первый столбец), а $4 четвёртое. При этом они отделяются запятой, чтобы вывод разделялся пробелом и был более читаемым.

Для вывода последнего поля (последнего столбца) также можно использовать команду $NF , представляющую последнее поле записи:

Читайте также:  Exchange server client on linux

Вывод конкретных строк столбца

Также можно указывать для вывода строку определённого столбца:

awk '' information.txt | head -1

Разделим эту команду на две части. Сначала awk » information.txt выводит первый столбец. Затем её результат (который мы видели выше) с помощью символа | передаётся на обработку команде head , где аргумент -1 указывает на выбор первой строки столбца.

Для вывода двух строк команда будет такой:

awk '' information.txt | head -2

Вывод строк с заданным шаблоном

Вы можете выводить строку, начинающуюся с заданной буквы. Например:

Omega Night 45 Ontario 600

Эта команда выбирает все строки с текстом, начинающимся на O .

Действие команды начинается с символа ^ , который указывает на начало строки. После этого прописывается буква, с которой нужная вам строка должна начинаться.

По аналогичному принципу можно выводить строку, завершающуюся конкретным шаблоном:

Thomas Shelby 30 Rio 400 Omega Night 45 Ontario 600 Giorgos Georgiou 35 London 300

Эта команда выводит строки, оканчивающиеся на 0 – здесь с помощью символа $ мы указываем, как должна заканчиваться нужная строка.

При этом её можно несколько изменить:

Символ ! используется в качестве приставки «НЕ», а значит, в этом случае будут выбраны строки, которые не оканчиваются на 0 .

firstName lastName age city ID Wood Tinker 54 Lisbon N/A Timmy Turner 32 Berlin N/A 

Использование регулярных выражений

Для вывода слов, содержащих определённые буквы, а также слов, соответствующих указанному шаблону, мы снова используем прямые слэши.

К примеру, если нас интересуют слова, содержащие io , мы пишем:

Thomas Shelby 30 Rio 400 Omega Night 45 Ontario 600 Giorgos Georgiou 35 London 300

Мы получили строки, в которых содержатся слова, содержащие io .

Теперь предположим, что в файле есть дополнительный столбец department :

firstName lastName age city ID department Thomas Shelby 30 Rio 400 IT Omega Night 45 Ontario 600 Design Wood Tinker 54 Lisbon N/A IT Giorgos Georgiou 35 London 300 Data Timmy Turner 32 Berlin N/A Engineering

Для поиска всей информации о людях, работающих в IT , нужно указать искомую строку между // :

Thomas Shelby 30 Rio 400 IT Wood Tinker 54 Lisbon N/A IT

А что, если мы хотим увидеть только имена и фамилии сотрудников из IT ?

Тогда можно указать столбец так:

Thomas Shelby Wood Tinker

В этом случае отобразятся только первый и второй столбцы строк, содержащих IT .

При поиске слов, содержащих конкретный шаблон, бывают случаи, когда требуется использовать экранирующий символ:

Wood Tinker 54 Lisbon N/A Timmy Turner 32 Berlin N/A

Я хотела найти строки, оканчивающиеся на N/A . Поэтому при указании критериев поиска в ‘ // ‘ , как это показывалось выше, мне пришлось использовать между N/A символ перехода \ . В противном случае возникла бы ошибка.

Использование операторов сравнения

Если вы, предположим, захотите найти всю информацию о сотрудниках в возрасте до 40 лет, то нужно будет использовать оператор сравнения < так:

Thomas Shelby 30 Rio 400 Giorgos Georgiou 35 London 300 Timmy Turner 32 Berlin N/A

В выводе представлена информация о людях моложе 40.

Заключение

Вот и всё. Теперь у вас есть необходимая основа для начала работы с awk и управления текстовыми данными.

Благодарю за чтение и успехов вам в обучении!

Источник

Оцените статью
Adblock
detector