2009-10-27 13 views
389
  • Jaka jest różnica między awk a sed?
  • Jakiej aplikacji najlepiej używać skrzynek do narzędzi sed i awk?
+1

Powiązana kontrola jakości na unix.stackexchange: [Czy istnieje podstawowy przewodnik dla grep, awk i sed?] (Http: //unix.stackexchange .pl/questions/2434/is-there-a-basic-tutorial-for-grep-awk-and-sed) – Dani

Odpowiedz

438

sed to edytor strumieni. Działa z strumieniami znaków w trybie on-line. Posiada prymitywny język programowania, który obejmuje pętle w stylu goto i proste warianty (oprócz dopasowywania wzorca i dopasowywania adresu). Zasadniczo istnieją tylko dwie "zmienne": przestrzeń wzorów i przestrzeń przechowywania. Czytelność skryptów może być trudna. Operacje matematyczne są w najlepszym wypadku wyjątkowo niezręczne.

Dostępne są różne wersje sed z różnymi poziomami obsługi opcji wiersza poleceń i funkcji językowych.

awk jest zorientowany na rozdzielane pola w trybie pojedynczej linii. Ma o wiele bardziej niezawodne konstrukty programistyczne, w tym ,/i(C-style i iteracja macierzy). Pełna obsługa zmiennych i jednoelementowych tablic asocjacyjnych plus (IMO) wielowymiarowych macierzy kludgey. Operacje matematyczne przypominają te z C. Ma on funkcje printf. „K” w „AWK” oznacza „K ernighan”, jak w „Kernighana i Ritchie” książki „Język ANSI C” sława (nie zapomnieć ho i W einberger). Można sobie wyobrazić wykrycie akademickiego plagiatu przy użyciu awk.

GNU awk (gawk) ma wiele rozszerzeń, w tym prawdziwe wielowymiarowe tablice w najnowszej wersji. Istnieją inne odmiany awk, w tym mawk i nawk.

Oba programy używają wyrażeń regularnych do wybierania i przetwarzania tekstu.

Zwykle używam sed, gdzie w tekście występują wzory. Na przykład można zamienić wszystkie liczby ujemne w pewnym tekście, które mają postać "znak minus, a następnie sekwencja cyfr" (np. "-231.45") z formularzem "nawiasów księgowych" (np. "(231.45) ") za pomocą tego (co ma miejsce na poprawę):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 

użyłbym awk gdy tekst wygląda bardziej jak wierszy i kolumn lub, jak awk odnosi się do nich«rekordy»i«pola»If. miałem zamiar zrobić podobną operację jak wyżej, ale tylko na trzecim polu w prosty oddzielonych przecinkami pliku może zrobić coś takiego:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile 

oczywiście to są tylko bardzo proste przykłady, które nie ilustrują pełny zakres możliwości, które każdy ma do zaoferowania:

+3

Dziękuję Dennis za szybkie wyjaśnienie. – Rachel

+3

Aby zobaczyć przykłady przesuwania granic 'sed': http://sed.sourceforge.net/#scripts –

+3

Dziękuję Dennis za dostarczenie linku do sed przykładów – Rachel

94

1) Jaka jest różnica między awk i sed?

Obie są narzędziami do przekształcania tekstu. ALE awk może robić więcej rzeczy oprócz samego manipulowania tekstem. Jest to język programowania z większością rzeczy, których uczysz się w programowaniu, takich jak tablice, pętle, czy kontrola przepływu itp. Możesz "programować" również w wersji sed, ale nie będziesz chciał zachować kodu w nim napisanego .

2) Jakiego rodzaju aplikacje najlepiej nadają się do narzędzi sed i awk?

Wniosek: Użyj sed do bardzo prostego parsowania tekstu. Cokolwiek poza tym, awk jest lepszy. W rzeczywistości możesz całkowicie zrezygnować z sed i po prostu użyć awk. Ponieważ ich funkcje nakładają się, a awk może więcej, wystarczy użyć awk. Zredukujesz również swoją krzywą uczenia się.

+5

Niezły punkt dotyczący krzywej uczenia się. Zbyt wiele narzędzi może się mieszać .. więc wolałabym się uczyć grep i awk tylko .. pozwala zapomnieć o sed :) – Outlier

+104

^^ Dosyć sed. (przepraszam, musiałem) –

+3

Uważam, że sed jest o wiele łatwiejszy do nauczenia, więc musisz to wyjaśnić. Kiedy nauczysz się opanowywać awk, może być przydatne szybkie nauczenie się sed, aby móc go używać szybciej w przypadku rzeczy, których możesz nie znać jeszcze w awk. –

30

Oba narzędzia mają pracować z tekstem i istnieją zadania, do których można użyć obu narzędzi.

Dla mnie zasadą ich rozdzielenia jest: użycie sed w celu zautomatyzowania zadań wykonywanych ręcznie w edytorze tekstu. To dlatego nazywa się strumień edytor. (Możesz użyć tych samych poleceń do edycji tekstu w vim). Użyj awk, jeśli chcesz analizować tekst, czyli pola zliczające, obliczyć sumy, wyodrębnić i zreorganizować struktury itp.

Nie powinieneś również zapominać o grep. Użyj grep, jeśli chcesz tylko wyszukać/rozpakować coś w tekście (plik)

Powiązane problemy