Використання awk в linux

Текст це серце Unix. Філософія "все є файл" повністю пронизує всю систему і розроблені для неї інструменти. Ось чому робота
з текстом є одним з обов`язкових навичок системного адміністратора або користувача-Linux.

AWK - один з найпотужніших інструментів для обробки і фільтрації тексту, доступний навіть для громадян не зв`язкових з програмуванням.

Використання awk в Linux

Найпростіша і часто затребувана завдання - вибірка полів зі стандартного виводу. Ви не знайдете більш підходящого інструмента для вирішення цього завдання, ніж awk. За замовчуванням awk розділяє поля пробілами. Якщо ви хочете надрукувати перше поле, вам потрібно просто вказати awk параметр $ 1:

$ Echo `one two three four` | awk `{print $ 3}`

three

Відео: How to use AWK command?

Іноді необхідно представити дані в певному форматі, наприклад, вибрати кілька слів. AWK легко справляється з угрупованням декількох полів і навіть дозволяє включати статичні дані:


three one$ Echo `one two three four` | awk `bar: ", $ 1`
foo: three | bar: one


Якщо поля майданчиках не пробілами, а іншим роздільником, просто вкажіть в параметрі -F потрібний роздільник в ковичках, наприклад ":":


four mississippi

Але роздільник не обов`язково укладати в ковичкі. Наступний висновок аналогічний попередньому:

$ Echo `one mississippi: two mississippi: three mississippi: four mississippi` | awk -F: `{print $ 4}`
four mississippi

Іноді потрібно обробити дані з невідомою кількістю полів. Якщо вам потрібно вибрати останнє поле можна скористатися змінної $ NF. Ось так ви можете вивести останнє поле:

Відео: Using AWK to format output


four


Також ви можете використовувати змінну $ NF для отримання передостаннього поля:

$ Echo `one two three four` | awk `{print $ (NF-1)}`
three

Або поля з середини:


three$ Echo `one two three four five` | awk `{print $ ((NF / 2) +1)}`
three

Все це можна зробити за допомогою таких утиліт як sed, cut і grep але це буде набагато складніше.

І ще одна можливість awk, підтримка оброблювачів для рядків:


one
two$ Echo -e `one 1 n two 2` | awk `{print $ 2}`
1
2
3

Це означає що ми повинні виконувати наступний блок коду для кожного рядка. Це можна використовувати, наприклад, для підрахунку кількості переданих даних за запитами з журналу веб-сервера.

Уявіть собі, у нас є журнал доступу, який виглядає так:

23 липня 18:57:12 HTTPD [31950]: "GET / Foo / бар HTTP / 1.1" 200 344
23 липня 18:57:13 HTTPD [31950]: "GET / HTTP / 1.1" 200 9300
23 липня 19:01:27 HTTPD [31950]: "GET / HTTP / 1.1" 200 9300
23 липня 19:01:55 HTTPD [31950]: "GET / Foo / Baz HTTP / 1.1" 200 6401
23 липня 19:02:31 HTTPD [31950]: "? GET / Foo / Baz сторінка = 2 HTTP / 1.1" 200 6312

Нам відомо що останнє поле це число переданих байт, тоді ми можемо використовувати змінну $ NF:


344
9300
9300
6401
6312

Ось так можна підрахувати кількість байт:

Відео: Using xargs in Linux

$ lt; requests.log awk `{totalBytes + = $ NF} END {print totalBytes}`
31657

Це тільки декілька прикладів показують використання awk в Linux, освоївши awk один раз в отримаєте дуже потужний і корисний інструмент на все життя.

Поділися в соціальних мережах:

Схожі
Різні поля в одному документі word.Різні поля в одному документі word.
Команда sort в linuxКоманда sort в linux
Команда find - пошук рядка символів в файліКоманда find - пошук рядка символів в файлі
Індекси в mysqlІндекси в mysql
Чим відрізняється unix від linuxЧим відрізняється unix від linux
Як правильно створювати структуру бази данихЯк правильно створювати структуру бази даних
Написання скриптів на bashНаписання скриптів на bash
Команда echo - висновок тексту на екран консоліКоманда echo - висновок тексту на екран консолі
Типи файлів в linuxТипи файлів в linux
Математичні функції в phpМатематичні функції в php
» » Використання awk в linux