A -F (FS változó értéke) ugyanolyan re-ként értelmezett, mint bárhol másutt. Ha vagylagosság (OR, nem XOR!) van benne, akármelyik alternatíva illeszkedése mezőt határol, ahol illeszkedik.
Itt arra használtam fel, hogy a lényeges rekord megtalálása után ne kelljen külön sztringfüggvénnyel darabolni a rekordot a keresett adat kiemeléséhez.
#EXTINF:0, Vegyes - m1
-- ilyen sor tartalmazza a csatornának azt az azonosítóját (itt: "m1"), ami a másik fájlban kulcsként használható. Ha azt mondom, hogy határold a " - " regexp (gyakorlatilag: sztring) mentén a mezőker, akkor az utolsó mező ($NF) értéke lesz az azonosító. Tkp. a $2 is ugyanezt jelenti, ha a megadott fájldarab jellemző az egészre. Másrészt ha akad olyan rekord, ahol a sor végén akár csak egy szóköz van, és a másik fájlban ez a szóköz nincs a csatornaid végén, az egész bukott.
http://192.168.1.10:8001/1:0:1:778D:2C2:600:E080000:0:0:0:
-- az ilyen alakú sorok utolsó /-jele után van a becserélendő sztring. Ha azt írom elő, hogy a darabolás olyan minta alapján történjen, ami a ":" + portszám + "/"- re illeszkedik (:[0-9]+/), akkor ebben a sorban is a $NF (vagy $2) értéke lesz a keresett adat.
A minta egyébként túlhatározott: a fájldarab szerint már a "[0-9]/" minta is elég volna.
A két FS lehetőséget csak összevontam a -F' - |:[0-9]+/' paraméterrel. Hogy a többi rekordot is szétdarabolja egy ilyen minta mentén, az a feladat szempontjából irreleváns.
Egyébként a megoldás alapja az éppen feldolgozás alatt álló fájl nevének (FILENAME) kiaknázása: ha az értéke "f1" akkor tudom, hogy kulcsot és ahhoz tartozó cseresztringet keresek, minden egyéb műveletet át is ugrok (next).
Ha a FILENAME nem "f1", akkor a többi kódrész jut szóhoz.
Ez feltölt egy tömböt f2 soraival. Megjegyzi, hogy hol volt #SERVICE rekord. Ha azután talál valahol az adott csatornaid alapján a cseresztringet a cserélendő helyére #DESCRIPTION mezőben, visszalép a tömb megfelelő sorára és cserél.
Ha a következő #SERVICE rekordig nincs #DESCRIPTION rekord, vagy üres az ott jegyzett csatornaid, akkor nem lesz csere.
F2 végigolvasása után kijön a kimenetre, ami a sorok tömbjébe bekerült és ott módosult vagy maradt.