awk команда в Linux

awk команда в Linux

awk е една от най-мощните и гъвкави команди в Linux. Тя се използва основно за обработка на текстови файлове и анализ на данни. awk е особено полезна при работа с редове и колони в текстови файлове, като CSV, логове или конфигурационни файлове.

В тази статия ще разгледаме:

  • Какво е awk и как работи 🧠
  • Основен синтаксис и структура 🧱
  • Примери от реалния свят 📁
  • Често използвани шаблони и команди 🔧
  • Практически съвети и трикове ✨

1. Какво е awk? 🤔

awk е език за обработка на шаблони. Името идва от инициалите на създателите му — Aho, Weinberger, и Kernighan. Той е създаден през 70-те години, но и до днес е незаменим инструмент за администратори и програмисти.

Основната идея зад awk е проста: чете входни редове от файл или команда, разделя ги на полета и прилага логика според шаблон.


2. Как работи awk? ⚙️

awk работи по следния начин:

  1. Чете входен текст ред по ред.
  2. Разделя всеки ред на полета (по подразбиране по интервали).
  3. Изпълнява действия върху съвпадащи шаблони.

Примерна команда:

awk '{ print $1 }' файл.txt

Тук awk отпечатва първото поле от всеки ред на файла.


3. Синтаксис на awk 🧱

Основният синтаксис е:

awk 'шаблон { действие }' файл
  • Шаблон – Условие, по което се избира ред (може да се пропусне).
  • Действие – Какво да се направи с реда.

Полезни променливи:

ПроменливаЗначение
$0Целият ред
$1, $2Първо, второ поле и т.н.
NRНомер на текущия ред
NFБрой на полетата в реда

4. Примери от практиката 📚

Нека разгледаме някои реални примери.

4.1. Извличане на колона

awk '{ print $2 }' данни.txt

📌 Показва второто поле от всеки ред.

4.2. Филтриране по стойност

awk '$3 > 100 { print $1, $3 }' продукти.txt

📌 Показва име и цена на продукти, по-скъпи от 100.

4.3. Подсчитане на редове

awk 'END { print NR }' файл.log

📌 Показва броя на редовете във файл.

4.4. Преобразуване на текст

awk '{ print toupper($0) }' вход.txt

📌 Преобразува всеки ред в главни букви.


5. Разделяне по различен разделител 🔣

По подразбиране, awk разделя по интервали или табулации. Можем да зададем друг разделител с опцията -F.

awk -F',' '{ print $1 }' файл.csv

📌 Разделя редовете по запетая и показва първото поле.

Можем и ръчно да настроим разделителя в самия скрипт:

awk 'BEGIN { FS=":" } { print $2 }' файл.txt

6. BEGIN и END блокове ⏱️

Тези блокове се използват за код, който се изпълнява преди или след обработката.

awk 'BEGIN { print "Списък на служители:" } { print $1 } END { print "Край" }' служители.txt

📌 Това ще добави заглавие и финален ред около резултатите.


7. Изчисления с awk ➕➖

awk поддържа аритметични операции:

awk '{ сума += $2 } END { print "Обща стойност:", сума }' покупки.txt

📌 Сумира всички стойности във втората колона.

Можем и да добавяме нови колони:

awk '{ с_ДДС = $2 * 1.20; print $1, с_ДДС }' продукти.txt

📌 Добавя колона с цена и 20% ДДС.


8. Условни конструкции 🔍

Можем да използваме if, else и други конструкции:

awk '{ if ($3 >= 50) print $1, "ОК"; else print $1, "НЕДОСТАТЪЧНО" }' стоки.txt

📌 Отпечатва статус според стойността в трета колона.


9. Цикли и масиви 🔄

С awk можем да използваме и масиви:

awk '{ брой[$1]++ } END { for (име in брой) print име, брой[име] }' имена.txt

📌 Преброява колко пъти се среща всяко име.


10. Използване на awk в комбинация с други команди 🔗

awk често се използва с grep, sort, cut, и други инструменти.

Пример:

ps aux | awk '$3 > 10 { print $1, $3, $11 }'

📌 Показва потребители и команди на процеси с над 10% CPU.


11. awk скриптове 📜

Вместо команден ред, можете да пишете цели awk скриптове:

#!/usr/bin/awk -f
BEGIN {
FS = ",";
print "Име | Възраст"
}
{
print $1 " | " $2
}
END {
print "Край на файла"
}

Запишете това в скрипт.awk, и изпълнете:

awk -f скрипт.awk данни.csv

12. awk срещу sed 🥊

И двете команди работят с текст. Но awk е по-подходяща за анализ, докато sed — за трансформация.

КомандаПодходяща за
awkОбработка по колони
sedТърсене и подмяна

13. Практически съвети 🧠

  • Използвайте -F за коректен разделител.
  • Пробвайте командите с малки файлове.
  • За сложна логика използвайте BEGIN и END.
  • Съхранявайте често използвани шаблони като скриптове.

Заключение 🏁

awk е мощен инструмент, който изглежда прост, но може да направи много. От обикновено извличане на данни до сложна логика — awk може всичко. След като разберете основите, ще спестите часове ръчна работа.

Независимо дали обработвате CSV файлове или логове от сървър, awk винаги е добър избор. Съчетайте го с други команди и ще отключите истинската му сила.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: