Поради по awk

Використання скорочень

Конструкцію, яка використовується для виведення рядків відповідних заданій масці:

можна скоротити до

Умова в awk може бути задано поза дужками, тобто отримуємо:

За замовчуванням, дії виробляються з усією рядком, $ 0 можна не вказувати:

print - є дією за замовчуванням, його теж можна не вказувати:

Для виведення значення першого стовпчика рядки, в якій присутній маска LEGO:

Для виведення значення першого стовпчика рядки, у другому стовпці якої є маска LEGO:

Для заміни слова LIGO на LEGO і виведення тільки змінених рядків можна використовувати:

Але якщо потрібно виводити всі рядки (як sed 's / LIGO / LEGO /'), конструкцію можна спростити (1 - true для всіх рядків):

Вивести всі рядки, за винятком кожній шостій:

Вивести рядки, починаючи з 6 (як tail -n +6 або sed '1,5d'):

Вивести рядки, в яких значення другого стовпця одно foo:

Вивести рядки, в яких 6 і більше стовпців:

Вивести рядки, в яких є слова foo і bar:

Вивести рядки, в яких є слово foo, але немає bar:

Вивести рядки, в яких є слова foo або bar (як grep -e 'foo' -e 'bar'):

Вивести всі непусті рядки:

Вивести всі рядки, видаливши вміст останнього стовпця:

Вивести номери рядків перед вмістом:

Замінимо команди (пропускаємо 1 рядок, фільтруємо рядки з foo і замінюємо foo на bar, потім переводимо в верхній регістр і виводимо значення другого стовпця):

аналогічною конструкцією на awk:

Використання діапазонів

Вивести групу рядків, починаючи з рядка, в якій є foo, і закінчуючи рядком, в якій є bar:

Виключивши з виведення рядка з входженням заданих масок:

Більш оптимальний варіант:

Виключити тільки рядок із завершальним входженням (bar)

Виключити тільки рядок з початковим входженням (foo)

Розбиття файлу по шаблонах

Є файл (file), в якому групи рядків розділені шаблонами FOO1, FOO2 і т.д. Необхідно записати дані, що знаходяться між мітками FOO в різні файли, що відповідають зазначеним в FOO номерами.

У GNU Awk можна зробити так:

парсинг CSV

За замовчуванням як роздільник використовуються пробіл і табуляція. Щоб визначити інший роздільник, наприклад кому, потрібно використовувати FS = ',' або опцію «-F».
Як параметр може бути задано регулярний вираз, наприклад:

Але для розбору CSV це не підійде, так як прогалини можуть бути присутніми і всередині рядків, тому простіше вирізати лідируючі прогалини перед і після коми:

Якщо в CSV дані поміщені в лапки, наприклад «field1", "field2», то підійде такий скрипт:

Але скрипт доведеться вдосконалити для розбору полів виду:

field1, «field2, with, commas». field3. «Field4, foo»

Порівняння двох файлів

Висновок всіх дублюються рядків з двох невідсортованих файлах file1 і file2:

Висновок тільки виділених блоків тексту

Наприклад, щоб показати з файлу з текстом тільки текст, зазначений як = текст = можна використовувати:

з форматуванням переносів рядків:

Корисні посилання по темі:

Схожі статті