NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
UK

Команди Linux і навички оболонки

awk: Коли стовпці стають програмами

awk — це те, чого ви досягаєте, коли стовпці стають одиницею роботи: журнали доступу nginx, /etc/passwd, вихід df, усе, що живе в полях. Це повна мова (змінні, масиви, арифметика, правила шаблонів-дій), одягнена в одностроковий одяг, що є ідеальним маскуванням для лог-криміналістики. Чесне обмеження: все, що awk робить зручно, — це одностроковий текст, а все, що потребує сторінки блоків, — це сценарій Python, який ще не визнав себе.

Головне

  • Розділення полів є основним трюком: awk -F: '$3 >= 1000 {print $1}' /etc/passwd перераховує реальних користувачів, а -F'[,|]' обробляє багатосимвольні розділювачі, коли cut вже закінчено.
  • Підрахунок за допомогою асоціативних масивів: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure перетворює будь-який журнал на таблицю частот одним рядком.
  • NR і NF відповідають на запитання файлів: 'NR==1' — це рядок заголовка, '{print NF}' підраховує стовпці в рядку, а порівняння NR із збереженими значеннями іншого файлу знаходить дублікати та прогалини.
  • Match plus extract — це хліб насущний: awk '/ 500 / {print $7, $9}' access.log витягує сторінки з помилками з URL-адресами, а OFS дозволяє повторно друкувати $0 після редагування одного поля, не переписуючи рядок самостійно.
  • У блоках BEGIN і END виконується сукупна робота: BEGIN встановлює роздільники, середні правила виконуються на рядок, END друкує підсумки; три блоки читаються добре, п’ять – це замаскований сценарій.
  • Цитування є справжнім ворогом однорядкових команд оболонки: візьміть програму в одинарні лапки, літерали всередині неї — у подвійні лапки, і пам’ятайте, що $7 у подвійних лапках у рядку оболонки ніколи не досягає awk.
  • Числова робота отримує LC_ALL=C: коми локалі в числах і непарні сортування повертають порівняння та сортування вбік, а закріплення локалі – це один рядок, який економить день.
  • Знайте межі: коми в лапках у CSV, вкладеному JSON або багаторядкових форматах із збереженням стану переходять у Python; awk є скальпелем і залишається ним.

Польова нотатка

Однорядкова програма awk, яка підсумовувала стовпці доларів із журналу з комами про локалі, створювала числа, які ніхто не сумнівався, поки бухгалтерія не відкрила звіт. LC_ALL=C того тижня переїхав до нашої бібліотеки псевдонімів і залишився.

Часті запитання

awk чи cut для колонкової роботи?

вирізати для одного фіксованого роздільника та звичайного списку стовпців; awk момент, коли з’являються умови, регулярний вираз, арифметика чи агрегати, і тоді cut все одно виходить за межі своєї глибини.

Як підсумувати або усереднити стовпець?

Агрегування в END: awk '{s += $5} END {print s, s/NR}' додає та усереднює поле п'ять по рядках; спочатку видаляє роздільники тисяч, якщо локаль містить коми в числах.

Чому мій однорядковий файл awk поводиться по-різному в macOS?

macOS постачає POSIX awk без розширень GNU, таких як -i inplace або gensub; сценарії, які виконуються в Linux, там можуть спокійно виходити з ладу, тому тримайте однострокові POSIX-форми або носіть gawk із собою.

Чи може awk аналізувати JSON?

Не має сенсу: JSON не має структури стовпців, яку розуміє awk, а хаки регулярних виразів порушують роботу вкладених об’єктів. Використовуйте jq, який є формою awk для JSON, або модуль json Python, коли робота зростає.

Допомога Kinetikatech: команди linux і навички оболонки

Це те, чим ми займаємося щодня: Команди та сценарії, які вирішують, чи керує адміністратор сервером, чи бореться з ним: шукайте, трансформуйте, пересилайте та контролюйте текст і процеси за допомогою інструментів, які присутні в кожній базовій установці. Наша служба Безпека серверів Linux та Адміністрування серверів бере все на себе — оцінювання, впровадження, цілодобовий контроль і екстрене реагування протягом 30 хвилин.

Поговорити з інженером

Проблема із сервером? Зламаний сайт? Повільна сторінка?

Критичні інциденти — відповідь за 30 хвилин, цілодобово, 7 днів на тиждень.

Запросити екстрену підтримку support@kinetikatech.com