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 екстрактът е ежедневният хляб: awk '/ 500 / {print $7, $9}' access.log изтегля страници с грешки с URL адреси, а OFS ви позволява да отпечатате отново $0 след редактиране на едно поле, без да пренаписвате сами реда.
- Блоковете BEGIN и END са мястото, където живее обобщената работа: BEGIN задава разделители, средните правила се изпълняват на ред, END отпечатва суми; три блока се четат добре, пет е сценарий, носещ маскировка.
- Цитирането е истинският враг на shell-liners: единични кавички на програмата, двойни кавички литерали вътре в нея и не забравяйте, че $7 вътре в двойни кавички shell низ никога не достига awk изобщо.
- Числовата работа получава LC_ALL=C: локалните запетаи в числата и нечетните сортирания обръщат сравненията и сортирането настрани, а закрепването на локала е един ред, който спестява следобед.
- Познайте тавана: цитираните запетаи в CSV, вложен JSON или многоредови формати със състояние отиват в Python; awk е скалпел и си остава такъв.
Бележка от терен
Един ред на awk, който сумира колони в долари от дневник със запетаи на локала, произвежда числа, които никой не поставя под съмнение, докато счетоводството не отвори отчета. LC_ALL=C се премести в нашата библиотека с псевдоними тази седмица и остана.
Често задавани въпроси
awk или cut за колонна работа?
изрязване за един фиксиран разделител и обикновен списък с колони; awk в момента, в който се появят условия, регулярен израз, аритметика или агрегати, в който момент изрязването така или иначе е извън своята дълбочина.
Как да сумирам или осредня колона?
Агрегиране в 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 команди и умения за командни обвивки: Командите и скриптовите навици, които решават дали администраторът управлява сървър или се бори с него: търсене, трансформиране, прехвърляне и надзор на текст и процеси с инструментите, които се намират във всяка основна инсталация. Точно затова съществува Сигурност на Linux сървъра и Сървърна администрация: въвеждане в експлоатация, укрепване, мониторинг и дежурен човек денонощно.