Jde nějak v programu awk získat výraz matchnutý v n-té závorce, v řádku, který sám odpovídá nějakému výrazu? To první není problém to je jen /re/ před {}. Cílem je vypsat jen čísla ,ne číslo°C.
cat file.txt |awk ' /typ=teplota/ { g= match($0,/[%#:]([0-9])°C/) ; print substr($0,RSTART+1,RLENGTH-3)
//obzvlášť to RSTART/RLENGTH+offset je oser a celé je to užvaněné jak java }
//jak by to mělo vypadat
cat file.txt |awk ' /typ=teplota/ { g= match_funkci($0,/[%#:]([0-9])°C/) ; print g[1] nebo \1 } '
Tady je příklad, je možné nějak programem awk docílit funkcionality z dospělých knihoven pro regulární výrazy, abych někde měl proměnnou s "match_data"?
Nejde to řešit přes FS, tuším., resp by to byl oser, jelikož z jedné strany je %:# , z druhé °C. Schválně jsem tam dal různé symboly a prokládám soubor mezerami, protože soubor nemá pevnou strukturu, jediné co je dané, je dělení na řádky.
Ono je toho víc, co bych po awk chtěl:
-celý obsah toho co bylo matchnuto (což je celý regexp kromě zpětných ohlédnutí a dopředných podíváních, pokud je umí awk, vůbec) .... obvykle se značí $0, případně \0 jenže v awk $N jsou sloupce.
-to co se nacházelo před matchnutým řetězce ... obvykle $`
- to co se nacházelo za matchnutým řetězcem .. obvykle $'.
n-tá závorka v patternu , obvykle \N nebo $N
- pojmenované závorky nepředpokládám že by to umělo
neuvádím schválně strukturu souboru, aby to netrendovalo k chybným odpovědím jako print $2. kdyby to byl CSV (hodně zjednodušeně)
Struktura je třeba
sd fsd ftype=teplotasldkjlsdkf:4°Cs df
as ldkjlsdkf%5°Csdtyp=teplotadkkjlj l l l ls
dsjjd
PS:
Umí awk vnořené { {} } ? Jako {/type=teplota/ {/\d+/} }
umí awk rozšířené regexp ? ([:alpha:] , \d, (?<=)
jsou (nebo mohou být) separátory v awk taky regulární výrazy?