Skąd wziąć nowy ciąg po uruchomieniu „sub” w awk

Z języka programowania Awk

Funkcja sub ( r, s , t ) najpierw znajduje najdłuższy podciąg z lewej strony dopasowany przez wyrażenie regularne r w ciągu docelowym t; następnie zastępuje podłańcuch ciągiem podstawienia s.

Funkcja sub(r,s) jest synonimem sub(r,s,$0).

W sub ( /ana/, "anda" , "banana" ), na przykład banana jest zastępowane przez bandada.

Po uruchomieniu sub ( r, s , t ), jak mogę uzyskać nowy ciąg? Na przykład w sub ( /ana/, "anda" , "banana" ), jak mogę uzyskać nowy ciąg znaków bandada?

Funkcja sub zwraca liczbę dokonanych podstawień.

Czy zwrot sub jest 0 czy 1? Czy to prawda, że nie może być więcej niż jeden, ponieważ sub znajdź tylko pierwsze dopasowanie i zamień je?

Dzięki.

Odpowiedź

Z podręcznika GNU awk 9.1.3 Funkcje manipulujące ciągami :

… trzeci argument sub() musi być zmienną, polem lub elementem tablicy. Niektóre wersje awk pozwalają, aby trzeci argument był wyrażeniem, które nie jest lwartością. W takim przypadku sub() nadal szuka wzorca i zwraca zero lub jeden, ale wynik podstawienie (jeśli istnieje) jest wyrzucane, ponieważ nie ma gdzie go umieścić. Takie wersje awk akceptują wyrażenia takie jak:

sub(/USA/, "United States", "the USA and Canada")

W celu zachowania zgodności historycznej, gawk akceptuje taki błędny kod, jednak użycie dowolnego innego niezmiennego obiektu jako trzeciego parametru powoduje błąd krytyczny i program nie będzie działać.

Zatem odpowiedzią jest użycie zmiennej:

awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *