- Jaka jest różnica między awk a sed?
- Jakiej aplikacji najlepiej używać skrzynek do narzędzi sed i awk?
Odpowiedz
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:
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ę.
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
^^ Dosyć sed. (przepraszam, musiałem) –
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. –
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)
- 1. Jaka jest różnica między cat_id a term_id?
- 2. Jaka jest różnica między IEnumerable a tablicami?
- 3. Jaka jest różnica między == a === w Verilog?
- 4. Jaka jest różnica między UseCase a Workflow?
- 5. Jaka jest różnica między pakietem a intencją?
- 6. Jaka jest różnica między węzłem a wierzchołkiem?
- 7. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 8. Jaka jest różnica między alertem a window.alert?
- 9. Jaka jest różnica między @android a android:
- 10. Jaka jest różnica między krotką a kompresją?
- 11. Jaka jest różnica między proxy a reify?
- 12. Jaka jest różnica między @Inject a @PersistenceContext?
- 13. Jaka jest różnica między sqlite3 a pdo_sqlite
- 14. Jaka jest różnica między Const a Constant?
- 15. Jaka jest różnica między Socket.IO a Firebase?
- 16. Jaka jest różnica między macierzą a tablix?
- 17. Jaka jest różnica między KERN_INVALID_ADDRESS a KERN_PROTECTION_FAILURE?
- 18. Jaka jest różnica między Float.POSITIVE_INFINITY a Float.MAX_VALUE?
- 19. Jaka jest różnica między SGML a XML?
- 20. Jaka jest różnica między Cake a Leiningen?
- 21. Jaka jest różnica między JavaBean a POJO?
- 22. Jaka jest różnica między kopiowaniem a klonowaniem?
- 23. Jaka jest różnica między HAVING a WHERE?
- 24. Jaka jest różnica między ItemTemplate a ItemPanelTemplate?
- 25. Jaka jest różnica między słownikiem a tablicą?
- 26. Jaka jest różnica między cancelBubble a stopPropagation?
- 27. Jaka jest różnica między NSString a NSMutableString?
- 28. Jaka jest różnica między StudlyCaps a CamelCase?
- 29. Jaka jest różnica między IPV6_ADD_MEMBERSHIP a IPV6_JOIN_GROUP?
- 30. Jaka jest różnica między spark.sql.shuffle.partitions a spark.default.parallelism?
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