Polecenia systemu Linux i umiejętności powłoki
awk: Kiedy kolumny stają się programami
awk jest tym, po co sięgasz, gdy kolumny stają się jednostką pracy: logi dostępu nginx, /etc/passwd, dane wyjściowe df, wszystko, co żyje w polach. Jest to kompletny język (zmienne, tablice, arytmetyka, reguły działania według wzorców) ubrany w jednowierszowe ubranie, co jest dokładnie odpowiednią maską dla kryminalistyki kłód. Uczciwa granica: wszystko, co awk robi wygodnie, jest jednowierszowe, a wszystko, co wymaga strony bloków, to skrypt Pythona, który jeszcze się nie przyznał.
Kluczowe punkty
- Dzielenie pól to podstawowa sztuczka: awk -F: '$3 >= 1000 {print $1}' /etc/passwd wyświetla listę prawdziwych użytkowników, a -F'[,|]' obsługuje wieloznakowe ograniczniki, gdy wycinanie już się zakończyło.
- Zliczanie za pomocą tablic asocjacyjnych: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure zamienia dowolny dziennik w tabelę częstotliwości w jednej linii.
- NR i NF odpowiadają na pytania dotyczące pliku: „NR==1” to linia nagłówka, „{print NF}” zlicza kolumny w wierszu, a porównanie NR z wartościami zapisanymi w innym pliku pozwala znaleźć duplikaty i luki.
- Dopasowanie i ekstrakt to chleb powszedni: awk '/ 500 / {print $7, $9}' access.log pobiera strony błędów z adresami URL, a OFS umożliwia ponowne wydrukowanie $0 po edycji pojedynczego pola bez konieczności samodzielnego przepisywania linii.
- Bloki BEGIN i END to miejsce, w którym działa agregacja: BEGIN ustawia separatory, środkowe reguły działają w każdym wierszu, END wyświetla sumy; trzy bloki czyta się dobrze, pięć to scenariusz w przebraniu.
- Cytowanie jest prawdziwym wrogiem jednowierszowych poleceń powłoki: umieść program w pojedynczym cudzysłowie, wewnątrz niego literały w podwójnym cudzysłowie i pamiętaj, że 7 $ w ciągu powłoki w podwójnym cudzysłowie nigdy w ogóle nie osiąga awk.
- Praca numeryczna otrzymuje LC_ALL=C: przecinki ustawień regionalnych w liczbach i zestawienia nieparzyste odwracają porównania i sortowanie na boki, a przypinanie ustawień regionalnych to jedna linia, która oszczędza popołudnie.
- Poznaj pułap: cudzysłowy w formacie CSV, zagnieżdżonym JSON lub stanowych formatach wielowierszowych trafiają do Pythona; awk jest skalpelem i nim pozostanie.
Notatka z praktyki
Jednoliniowy awk, który sumował kolumny dolarów z dziennika z przecinkami wskazującymi ustawienia regionalne, dał liczby, których nikt nie kwestionował, dopóki księgowość nie otworzyła raportu. LC_ALL=C przeniósł się do naszej biblioteki aliasów w tym tygodniu i tam pozostał.
Częste pytania
awk czy wyciąć do pracy kolumnowej?
wycięte dla jednego stałego separatora i zwykłej listy kolumn; awk w momencie, gdy pojawiają się warunki, wyrażenia regularne, arytmetyka lub agregaty, w którym to momencie cięcie i tak jest poza jego głębokością.
Jak sumować lub uśredniać kolumnę?
Agreguj na END: awk '{s += $5} END {print s, s/NR}' dodaje i uśrednia pięć pól w poprzek linii; usuń najpierw separatory tysięcy, jeśli ustawienia regionalne umieszczają przecinki w liczbach.
Dlaczego mój jednowierszowy awk zachowuje się inaczej w systemie macOS?
macOS dostarcza awk POSIX bez rozszerzeń GNU, takich jak -i inplace lub gensub; skrypty działające pod Linuksem mogą tam po cichu zawieść, więc trzymaj jednowierszowe skrypty w kształcie POSIX lub noś ze sobą gawk.
Czy awk może analizować JSON?
Mało znaczące: JSON nie ma struktury kolumn zrozumiałej dla awk, a hacki wyrażeń regularnych psują się na zagnieżdżonych obiektach. Użyj jq, który jest kształtem awk dla JSON, lub modułu json Pythona, gdy zadanie rośnie.
Jak Kinetikatech pomaga w polecenia systemu linux i umiejętności powłoki
Tym zajmujemy się na co dzień: Polecenia i nawyki związane z tworzeniem skryptów, które decydują o tym, czy administrator obsługuje serwer, czy z nim walczy: przeszukuje, przekształca, przesyła i nadzoruje tekst i procesy za pomocą narzędzi znajdujących się w każdej podstawowej instalacji. Nasza usługa Bezpieczeństwo serwerów Linux i Zarządzanie serwerami obejmuje to kompleksowo: ocenę, wdrożenie, monitoring 24/7 oraz reakcję awaryjną w 30 minut.