De unde să obțineți noul șir după ce ați rulat `sub` în awk

Din Limbajul de programare Awk

Funcția sub ( r, s , t ) găsește mai întâi cel mai lung substring din stânga potrivit cu expresia regulată r din șirul țintă t; apoi înlocuiește șirul de caractere cu șirul de substituție s.

Funcția sub(r,s) este un sinonim pentru sub(r,s,$0).

În sub ( /ana/, "anda" , "banana" ), de exemplu, banana este înlocuit cu bandada.

După executarea sub ( r, s , t ), cum pot obține noul șir? De exemplu, în sub ( /ana/, "anda" , "banana" ), cum pot obține noul șir bandada?

Funcția secundară returnează numărul de substituții efectuate.

Întoarcerea sub este 0 sau 1? Este corect că nu poate fi mai mult de unul, deoarece sub găsește prima potrivire și o înlocuiește?

Mulțumesc.

Răspuns

Din manualul GNU awk 9.1.3 Funcții de manipulare a șirurilor :

… al treilea argument pentru sub() trebuie să fie o variabilă, un câmp sau un element matrice. Unele versiunile awk permit ca al treilea argument să fie o expresie care nu este o valoare. Într-un astfel de caz, sub() încă caută modelul și returnează zero sau unul, dar rezultatul substituția (dacă există) este aruncată pentru că nu există unde să o puneți. Astfel de versiuni ale awk acceptă expresii precum următoarele:

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

Pentru compatibilitatea istorică, gawk acceptă un astfel de cod eronat. Cu toate acestea, utilizarea oricărui alt obiect care nu poate fi schimbat ca al treilea parametru provoacă o eroare fatală, iar programul dvs. nu va rula.

Deci, răspunsul este să folosiți o variabilă:

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *