- Jaka jest różnica między awk a sed?
- Jakie aplikacje najlepiej sprawdzają się w przypadku narzędzi sed i awk?
Odpowiedzi:
sed
jest edytorem strumieniowym. Działa ze strumieniami znaków dla poszczególnych linii. Ma prymitywny język programowania, który zawiera pętle w stylu goto i proste warunki warunkowe (oprócz dopasowania wzorca i dopasowania adresu). Zasadniczo istnieją tylko dwie „zmienne”: przestrzeń wzoru i przestrzeń wstrzymania. Czytelność skryptów może być trudna. Operacje matematyczne są co najwyżej wyjątkowo niezręczne.
Istnieją różne wersje sed
z różnymi poziomami wsparcia dla opcji wiersza poleceń i funkcji językowych.
awk
jest zorientowany na pola rozdzielane liniami dla poszczególnych linii. Ma wiele bardziej wytrzymałe konstrukcje programistyczne w tym if
/ else
, while
, do
/ while
a for
(C-stylu i macierzy iteracji). Istnieje pełne wsparcie dla zmiennych i jednowymiarowych tablic asocjacyjnych oraz tablic kludgey wielowymiarowych (IMO). Operacje matematyczne przypominają te w C. Ma printf
i ma funkcje. „K” w „AWK” oznacza „ K ernighan”, podobnie jak w „Kernighan and Ritchie” sławy książki „C Programming Language” (nie zapominając o Ho i W einbergerze). Można sobie wyobrazić użycie wykrywacza akademickiego plagiatu awk
.
GNU awk
( gawk
) ma wiele rozszerzeń, w tym prawdziwe tablice wielowymiarowe w najnowszej wersji. Istnieją inne odmiany awk
obejmujące mawk
i nawk
.
Oba programy używają wyrażeń regularnych do wybierania i przetwarzania tekstu.
Zwykle używam sed
tam, gdzie są wzory w tekście. Na przykład możesz zamienić wszystkie liczby ujemne w tekście w postaci „znak minus, po którym następuje ciąg cyfr” (np. „-231.45”), w formie „nawiasów księgowych” (np. „(231,45)” ) przy użyciu tego (który ma pole do poprawy):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Użyłbym, awk
gdy tekst bardziej przypomina wiersze i kolumny lub, jak awk
się je odnosi, „rekordy” i „pola”. Gdybym miał wykonać podobną operację jak powyżej, ale tylko na trzecim polu w prostym pliku rozdzielanym przecinkami, mógłbym zrobić coś takiego:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Oczywiście są to tylko bardzo proste przykłady, które nie ilustrują pełnego zakresu możliwości, jakie każdy ma do zaoferowania.
sed
: sed.sourceforge.net/#scripts
1) Jaka jest różnica między awk a sed?
Oba są narzędziami przekształcającymi tekst. ALE awk może robić więcej rzeczy niż tylko manipulowanie tekstem. Jest to język programowania sam w sobie z większością rzeczy, których uczysz się w programowaniu, takich jak tablice, pętle, sterowanie przepływem if / else itp. Możesz także „programować” w sed, ale nie chcesz, aby kod był w nim zapisany .
2) Jakie aplikacje najlepiej sprawdzają się w przypadku narzędzi sed i awk?
Wniosek: użyj sed do bardzo prostej analizy tekstu. Poza tym awk jest lepszy. W rzeczywistości możesz całkowicie rzucić sed i po prostu użyć awk. Ponieważ ich funkcje się pokrywają, awk może zrobić więcej, wystarczy użyć awk. Zmniejszysz również swoją krzywą uczenia się.
sed
, 's/search/replace'
jest o wiele łatwiejszy do pisania niż awk
składnia i jest tym, czego potrzebujesz przez większość czasu.
Oba narzędzia są przeznaczone do pracy z tekstem i są zadania, do których można użyć obu narzędzi.
Dla mnie reguła, aby je rozdzielić to: Użyj sed
do automatyzacji zadań, które w innym przypadku zrobiłbyś w edytorze tekstu ręcznie. Dlatego nazywa się to edytorem strumieniowym . (Możesz użyć tych samych poleceń, aby edytować tekst w vimie). Użyj, awk
jeśli chcesz analizować tekst, co oznacza zliczanie pól, obliczanie sum, wyodrębnianie i reorganizację struktur itp.
Również nie powinieneś zapominać o grep
. Użyj, grep
jeśli chcesz tylko przeszukać / wyodrębnić coś w tekście (pliku)