sedjest 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 sedz różnymi poziomami wsparcia dla opcji wiersza poleceń i funkcji językowych.
awkjest zorientowany na pola rozdzielane liniami dla poszczególnych linii. Ma wiele bardziej wytrzymałe konstrukcje programistyczne w tym if/ else, while, do/ whilea 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 printfi 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 awkobejmujące mawki nawk.
Oba programy używają wyrażeń regularnych do wybierania i przetwarzania tekstu.
Zwykle używam sedtam, 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, awkgdy tekst bardziej przypomina wiersze i kolumny lub, jak awksię 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:
@DennisWilliamson - Czy znajdę się w niekorzystnej sytuacji, jeśli nauczę się tylko awk? Czy awk jest znacznie częściej używany niż sed?
Steam,
4
@blasto: Polecam uczyć się obu, ale z większym naciskiem na awk. Wiele wyrażeń regularnych dotyczy zarówno (jak i innych narzędzi i języków). Używaj sed do prostszych rzeczy i staraj się unikać skomplikowanych rzeczy. To naprawdę fajne, że możesz robić pętle i gałęzie w sed, ale wynikowe linie poleceń są złożone i trudne do odczytania. Odpowiedź na twoje pytanie naprawdę zależy od tego, co robisz.
Wstrzymano do odwołania.
@DennisWilliamson - Co byłoby najbardziej przydatne dla programisty ETL? ETL lub Extract Transform and Load to termin hurtowni danych. Mówiąc prościej, zadanie obejmuje WYDOBYCIE danych z różnych różnych źródeł (takich jak DB, pliki Excel, pliki csv itp.), TRANSFORMACJA tego samego, a następnie ŁADOWANIE do magazynu danych (DW) w celu analizy, znajdowania wzorców w danych lub po prostu historycznych dokumentacja. na przykład. Ostateczne zastosowanie DW - Algorytmy zastosowane do DW sklepu spożywczego, który ma dane z ostatnich 10 lat, może ujawnić, że ludzie, którzy kupują jabłka, również kupują pomarańcze lub coś podobnego.
Steam,
1
Tylko FYI dla każdego, kto natknie się na to na Macu, spróbuj „sed -E 's / - ([0-9] +. [0-9] *) / (\ 1) / g'” na pierwszym przykładzie sed
Daniel Schmidt,
124
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ę.
Fajna uwaga na temat krzywej uczenia się .. zbyt wiele narzędzi może się pomieszać .. więc wolałbym uczyć się tylko grep i awk .. zapomnijmy o sed :)
Outlier
174
^^ Dość sed. (przepraszam, musiałem)
Greg M. Krsak
8
Uważam, że sed jest o wiele łatwiejszy do nauczenia, więc musisz się z tym pogodzić. Gdy nauczysz się opanowywać awk, przydatne może być szybkie nauczenie się sed, aby móc go szybciej używać do rzeczy, których jeszcze nie wiesz, jak robić w awk.
Nie rób tego sed, 's/search/replace'jest o wiele łatwiejszy do pisania niż awkskładnia i jest tym, czego potrzebujesz przez większość czasu.
sjas
54
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 seddo 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, awkjeś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, grepjeśli chcesz tylko przeszukać / wyodrębnić coś w tekście (pliku)
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 tymif
/else
,while
,do
/while
afor
(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. Maprintf
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 plagiatuawk
.GNU
awk
(gawk
) ma wiele rozszerzeń, w tym prawdziwe tablice wielowymiarowe w najnowszej wersji. Istnieją inne odmianyawk
obejmującemawk
inawk
.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):Użyłbym,
awk
gdy tekst bardziej przypomina wiersze i kolumny lub, jakawk
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: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.
źródło
sed
: sed.sourceforge.net/#scripts1) 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ę.
źródło
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)źródło