Man page - mawk-code(7)

Packages contains this manual

Manual

MAWK-CODE

NAME
SYNOPSIS
PROGRAM CODES
a_cat
a_del
a_length
a_pusha
a_test
add
add_asg
ae_pusha
ae_pushi
aloop
assign
atan2
call
cat
close
cos
del_a
div
div_asg
eq
exit
exit0
exp
f_add_asg
f_assign
f_div_asg
f_mod_asg
f_mul_asg
f_post_dec
f_post_inc
f_pow_asg
f_pre_dec
f_pre_inc
f_pusha
f_pushi
f_sub_asg
fe_pusha
fe_pushi
fflush
gt
gte
index
int
jmain
jmp
jnz
jz
l_pusha
l_pushi
la_pusha
lae_pusha
lae_pushi
length
ljnz
ljz
log
lt
lte
match0
match1
match2
mktime
mod
mod_asg
mul
mul_asg
neq
next
nextfile
nf_pushi
not
ol_gl
ol_gl_nr
omain
pop
pop_al
post_dec
post_inc
pow
pow_asg
pre_dec
pre_inc
pusha
pushc
pushd
pushi
pushint
pushs
rand
range
ret
ret0
set_al
sin
sprintf
sqrt
srand
stop
strftime
sub
sub_asg
substr
system
systime
test
tolower
toupper
uminus
uplus
REGULAR EXPRESSIONS
M_1J
M_2JA
M_2JB
M_2JC
M_ACCEPT
M_ANY
M_CLASS
M_END
M_ENTER
M_LOOP
M_SAVE_POS
M_START
M_STR
M_U

NAME

mawk-code - dumping mawk’s byte-code

SYNOPSIS

At startup, mawk compiles the script into byte-code. After that, it interprets the compiled byte-code. Use the -Wdump option to show the byte-code.

PROGRAM CODES

As mawk executes the program, it maintains a reference to the command to execute in cdp . After that there may be data and/or references in cdp [0], cdp [1], etc.

When an operation requires operands, mawk pushes the values (or array/string references) onto the stack, which updates the stack pointer sp . When the operation completes, mawk consumes those entries on the stack, pushing the result (if any) onto the stack.

While executing user-defined functions, mawk maintains a frame pointer fp to address the function’s local variables.

a_cat

Concatenate array-indices .

Usage:

Forms a multiple array index by concatenating the elements of sp [1- cnt ..0], with each element separated by SUBSEP .

Parameters:

cdp[0]

cnt , the number of elements to concatenate follows the command.

sp[0]..sp[1- cnt ]

hold reference to the elements to concatenate.

Returns the index in sp[0].

a_del

Delete an array item .

Usage:

delete array[expr]

Parameters:

sp[0]

points to array

sp[-1]

is an expr

a_length

Find the length of an array .

Usage:

length(array)

Parameters:

sp[0]

points to array .

Returns the length of the array in sp[0].

a_pusha

Push array address onto stack .

Usage:

This is used to set up a calling argument for a function.

Parameters:

cdp[0]

array reference follows the command.

Returns the array in sp[0].

a_test

Test if an expression is present in an array .

Usage:

(expression in array)

Parameters:

sp[0]

points to an array .

sp[-1]

is an expression .

Returns 1 in sp[0] if the expression is found, 0 otherwise.

add

Add two numbers .

Usage:

first + second

Parameters:

sp[0]

holds the second value.

sp[-1]

holds the first value.

Returns the sum in sp[0].

add_asg

Combined addition/assignment .

Usage:

target += source

Parameters:

sp[0]

is the source expression

sp[-1]

points to the target

Stores the sum in the target , leaving sp[0] pointing to the target .

ae_pusha

Push reference to array cell, given expression for its index .

Usage:

arrayname [ expression ]

Parameters:

cdp[0]

an array reference follows the command.

sp[0]

has an expression, used for the index of a cell in the array.

Returns a reference to the addressed cell in sp[0].

ae_pushi

Push contents of array cell, given expression for its index .

Usage:

arrayname [ expression ]

Parameters:

sp[0]

has an expression, used for the index of a cell in the array.

Returns contents of the addressed cell in sp[0].

aloop

Update reference to next cell for array loop .

Usage:

for ( i in arrayname ) statement

Parameters:

none

Mawk maintains a stack of array-loop state. It updates the array/cell references in the current loop’s state.

assign

Assigns a value .

Usage:

target = source

Parameters:

sp[0]

is the source expression

sp[-1]

points to the target

Stores the sum in the target , leaving sp[0] pointing to the target .

atan2

Compute arc-tangent of two values .

Usage:

atan2( first , second )

Parameters:

sp[0]

holds the second value

sp[-1]

holds the first value

Returns the result in sp[0].

call

Call a function .

Usage:

function ()

Parameters:

cdp[0]

is a reference to the function block

cdp[1]

holds number of input arguments

Returns function value in sp[0].

cat

Concatenate two strings .

Usage:

first second

Parameters:

sp[0]

is the second string.

sp[-1]

is the first string.

Returns the result in sp[0].

close

Close the file or pipe associated with an expression .

Usage:

close( expression )

Parameters:

sp[0]

holds the expression identifying the file to close

Returns the status from closing the file, 0 on success or -1 on failure.

cos

Compute the cosine of a value in radians .

Usage:

cos( value )

Parameters:

sp[0]

is the value .

Returns the result in sp[0].

del_a

Delete an array .

Usage:

delete(array)

Parameters:

sp[0]

is the array to delete.

div

Divide one number by another .

Usage:

first / second

Parameters:

sp[0]

is the second value.

sp[-1]

is the first value.

Returns the quotient in sp[0].

div_asg

Combined division/assignment .

Usage:

target /= source

Parameters:

sp[0]

is the source

sp[-1]

points to the target

Stores the quotient in the target , leaving sp[0] pointing to the target.

eq

Compare two values .

Usage:

first == second

Parameters:

sp[0]

is the second value

sp[-1]

is the first value

Returns 1 in sp[0] if the values are equal, otherwise 0.

exit

Exits mawk with a specific exit-code .

Usage:

exit( exit_code )

Parameters:

sp[0]

is the exit_code

exit0

Exits mawk with success

Usage:

exit

Parameters:

none

exp

Compute base-e exponential function of a value .

Usage:

exp( value )

Parameters:

sp[0]

is the value

Returns the result in sp[0].

f_add_asg

Combination addition/assignment to NF .

Usage:

NF += expression

Parameters:

sp[0]

is the expression to add

f_assign

Assign an expression to NF .

Usage:

NF = expression

Parameters:

sp[0]

is the expression

f_div_asg

Combination division/assignment to NF .

Usage:

NF /= expression

Parameters:

sp[0]

is the expression

f_mod_asg

Combination modulus/assignment to NF .

Usage:

NF %= expression

Parameters:

sp[0]

is the expression

f_mul_asg

Combination multiplication/assignment to NF .

Usage:

NF *= expression

Parameters:

sp[0]

is the expression

f_post_dec

Post-decrement using NF .

Usage:

NF--

Parameters:

holds a reference to the field to use

f_post_inc

Post-increment using NF .

Usage:

NF++

Parameters:

holds a reference to the field to use

f_pow_asg

Exponentiation using NF .

Usage:

NF ˆ= expression

Parameters:

sp[0]

is the expression to use

f_pre_dec

Predecrement using NF .

Usage:

--NF

Parameters:

sp[0]

holds a reference to the field to use

f_pre_inc

Preincrement using NF .

Usage:

++NF

Parameters:

sp[0]

holds a reference to the field to use

f_pusha

Push array reference to data split-up as fields. .

Usage:

$0 = expression
getline

Parameters:

cdp[0]

is a reference to the data to be split/assigned.

Returns the resulting array reference in sp[0].

f_pushi

Push contents of numbered field .

Usage:

$ expression

Parameters:

cdp[0]

holds a reference to $ expression

cdp[1]

holds expression

Returns the field’s value in sp[0].

f_sub_asg

Combination subtraction/assignment to NF .

Usage:

NF -= expression

Parameters:

sp[0]

holds a reference to the field to use

fe_pusha

Push reference to numbered field .

Usage:

$ number

Parameters:

sp[0]

holds the field number

Returns a reference to the field in sp[0].

fe_pushi

Push content of numbered field .

Usage:

$ number

Parameters:

sp[0]

holds the field number

Returns the field’s content in sp[0].

fflush

Flush the output file or pipe associated with an expression .

Usage:

fflush( expression )

Parameters:

sp[0]

is the expression value

Returns the result in sp[0].

gt

Test if first value is greater than the second .

Usage:

first > second

Parameters:

sp[0]

holds the second value.

sp[-1]

holds the first value.

Returns 1 in sp[0] if the first value is greater than, otherwise 0.

gte

Test if first value is greater than or equal to the second .

Usage:

first >= second

Parameters:

sp[0]

holds the second value.

sp[-1]

holds the first value.

Returns 1 in sp[0] if the first value is greater than or equal, otherwise 0.

index

Find the position of the second string in the first .

Usage:

index( first , second )

Parameters:

sp[0]

is the second string

sp[0]

is the first string

Returns the position in sp[0] starting at 1 if found, 0 if not found.

int

Returns a value truncated towards zero. .

Usage:

int( value )

Parameters:

sp[0]

is the value

Returns the result in sp[0].

jmain

Go from BEGIN code to MAIN code .

Usage:

(internal state)

Parameters:

none

jmp

Jump to a new byte-code position, by a given number of bytes .

Usage:

(internal state)

Parameters:

cdp[0]

holds the (signed) number of bytes by which to jump.

jnz

Jump to a new byte-code position if sp[0] is nonzero, by a given number of bytes .

Usage:

(internal state)

Parameters:

cdp[0]

holds the (signed) number of bytes by which to jump.

sp[0]

holds a value to compare against 0.

jz

Jump to a new byte-code position if sp[0] is zero, by a given number of bytes .

Usage:

(internal state)

Parameters:

cdp[0]

holds the (signed) number of bytes by which to jump.

sp[0]

holds a value to compare against 0.

l_pusha

Push a local address onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

holds the offset from the frame pointer fp .

Returns the address in sp[0].

l_pushi

Push contents of a local variable onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

holds the offset from the frame pointer fp .

Returns the contents of the local variable in sp[0].

la_pusha

Pushes a reference to an array onto the evaluation stack .

Usage:

arrayname

Parameters:

cdp[0]

holds the offset from the frame pointer fp of a reference to an array.

Returns a reference to the array in sp[0].

lae_pusha

Pushes a reference to a given array cell onto the evaluation stack .

Usage:

arrayname [ expression ]

Parameters:

cdp[0]

holds the offset from the frame pointer fp of a reference to an array.

sp[0]

holds an expression

Returns a reference to the specified array cell in sp[0].

lae_pushi

Pushes the contents of a given array cell onto the evaluation stack .

Usage:

arrayname [ expression ]

Parameters:

cdp[0]

holds the offset from the frame pointer fp of a reference to an array.

sp[0]

holds an expression

Returns the contents of the specified array cell in sp[0].

length

Returns the length of a string or array value .

Usage:

length( value )

Parameters:

sp[0]

is the string or array reference

Returns the length in sp[0].

ljnz

Special jump for logical-OR, always preceded by test .

Usage:

(internal state)

Parameters:

cdp[0]

holds the (signed) number of bytes by which to jump if the value is nonzero.

sp[0]

holds a value to compare against 0.

ljz

Special jump for logical-OR, always preceded by test .

Usage:

(internal state)

Parameters:

cdp[0]

holds the (signed) number of bytes by which to jump if the value is zero.

sp[0]

holds a value to compare against 0.

log

Compute the natural logarithm of a value .

Usage:

log( value )

Parameters:

sp[0]

is the value

Returns the result in sp[0].

lt

Test if first value is less than the second .

Usage:

first < second

Parameters:

sp[0]

holds the second value.

sp[-1]

holds the first value.

Returns 1 in sp[0] if the first value is less than, otherwise 0.

lte

Test if first value is less than or equal to the second .

Usage:

first <= second

Parameters:

sp[0]

holds the second value.

sp[-1]

holds the first value.

Returns 1 in sp[0] if the first value is less than or equal, otherwise 0.

match0

Test if $0 matches a given regular expression .

Usage:

$0 ˜ regex

Parameters:

cdp[0]

holds a reference to a regular expression.

Returns 1 in sp[0] if $0 matches the regular expression, 0 otherwise.

match1

Test if a given expression matches a given regular expression .

Usage:

expression ˜ regex

Parameters:

cdp[0]

holds a reference to a regular expression.

sp[0]

holds an expression to test.

Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise.

match2

Test if an expression in sp[-1] matches the regular expression in sp[0] .

Usage:

expression ˜ regex

Parameters:

sp[0]

holds a reference to a regular expression.

sp[-1]

holds an expression to test.

Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise.

mktime

Converts a date specification in systime format to a timestamp .

Usage:

mktime( string )

Parameters:

sp[0]

holds the date-specification string

Returns the result in sp[0].

mod

Compute modulus/remainder with two operands .

Usage:

first % second

Parameters:

sp[0]

holds the second operand

sp[-1]

holds the first operand

Returns the remainder in sp[0].

mod_asg

Assign modulus/remainder with two operands .

Usage:

first %= second

Parameters:

sp[0]

holds the second operand

cdp[0]

holds the first operand

Returns the remainder in sp[0] as well as replacing the first value.

mul

Compute product with two operands .

Usage:

first * second

Parameters:

sp[0]

holds the second value

sp[-1]

holds the first value

Returns the product in sp[0].

mul_asg

Assign product with two operands .

Usage:

first *= second

Parameters:

sp[0]

holds the second value

sp[-1]

holds the first value

Returns the product in sp[0] as well as replacing the first value.

neq

Compare two values .

Usage:

first != second

Parameters:

sp[0]

is the second value

sp[-1]

is the first value

Returns 1 in sp[0] if the values are not equal, otherwise 0.

next

Read the next record, restart pattern testing .

Usage:

next

Parameters:

none

nextfile

Begin processing the next file listed on the command line .

Usage:

nextfile

Parameters:

none

nf_pushi

Push the number of fields (NF) onto the evaluation stack .

Usage:

(internal state)

Parameters:

none

not

Compute a logical negation .

Usage:

! value

Parameters:

sp[0]

holds a value to negate.

Returns the result on the evaluation stack, i.e., 0 if the value is nonzero and 1 otherwise.

ol_gl

Read into $0 using getline .

Usage:

getline

Parameters:

none

ol_gl_nr

Read into $0 using getline, updating NR and FNR .

Usage:

getline < file

Parameters:

none

omain

Start executing the main section of the script (between BEGIN and END) .

Usage:

(internal state)

Parameters:

none

pop

Pop the evaluation stack, discarding the value .

Usage:

(internal state)

Parameters:

none

pop_al

Finish an array “in” loop, deallocating the state information .

Usage:

(internal state)

Parameters:

none

post_dec

Post-decrement a value .

Usage:

value --

Parameters:

sp[0]

holds the value to decrement

Returns the updated value in sp[0].

post_inc

Post-increment a value .

Usage:

value ++

Parameters:

sp[0]

holds the value to increment

Returns the updated value in sp[0].

pow

Compute the first value raised to the power of the second value .

Usage:

first ˆ second

Parameters:

sp[0]

holds the second value

sp[-1]

holds the first value

Returns the result in sp[0].

pow_asg

Assign the first value raised to the power of the second value .

Usage:

variable = first ˆ second

Parameters:

cdp[0]

is a reference to the variable which will be assigned the result

sp[0]

holds the second value

sp[-1]

holds the first value

pre_dec

Pre-decrement a value .

Usage:

-- value

Parameters:

sp[0]

holds the value to decrement.

Returns the updated value in sp[0];.

pre_inc

Pre-increment a value .

Usage:

++ value

Parameters:

sp[0]

holds the value to decrement.

Returns the updated value in sp[0];.

pusha

Push array address onto stack .

Usage:

(internal state)

Parameters:

cdp[0]

array reference follows the command.

Returns the array in sp[0].

pushc

Push a data cell onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

is a reference to the data to push

Returns a reference to the result in sp[0].

pushd

Push a double floating value onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

is a reference to the data to push

Returns a reference to the result in sp[0].

pushi

Push contents of next referenced variable onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

is a reference to the data cell to copy.

Returns a reference to the result in sp[0].

pushint

Reserve the next slot on the evaluation stack, setting its type .

Usage:

(internal state)

Parameters:

cdp[0]

holds the type to set in the new slot, e.g., for data via I/O redirection

Returns a reference to the result in sp[0].

pushs

Push a reference to a string value onto the evaluation stack .

Usage:

(internal state)

Parameters:

cdp[0]

holds a reference to the string value

Returns a reference to the result in sp[0].

rand

Returns a random number between zero and one. .

Usage:

rand()

Parameters:

none

Returns the result in sp[0].

range

Test a range pattern: pat1, pat2 { action } .

Usage:

(internal state)

Parameters:

cdp[0].op

a flag, test pat1 if on else pat2

cdp[1].op

offset of pat2 code from cdp

cdp[2].op

offset of action code from cdp

cdp[3].op

offset of code after the action from cdp

cdp[4]

start of pat1 code

sp[0]

holds arguments for the action.

ret

Return a function value .

Usage:

return value

Parameters:

sp[0]

holds the return value

When calling a function, mawk saves the current stack, creating a new one. On return, mawk restores the previous stack and returns the function value in sp[0].

ret0

Return from a function without providing a return-value .

Usage:

return

Parameters:

sp[0]

is modified to make the value uninitialized.

As in the ret operation, mawk restores the previous stack. After the return, sp[0] is an uninitialized value.

set_al

Begin an array “in” loop .

Usage:

for ( iterator in arrayname ) statement

Parameters:

sp[0]

holds a reference to the array

sp[-1]

holds a reference to the iteration variable

Mawk pushes a new entry onto the array loop stack, and updates cdp to point to the statement to execute.

sin

Compute the sine of a value in radians .

Usage:

sin( value )

Parameters:

sp[0]

holds the value

Returns the result in sp[0].

sprintf

Returns a string constructed from expression-list according to format .

Usage:

sprintf( format [, value1 [,... ] ] )

Parameters:

sp[0]

is the last parameter value; there can be up to 255.

Returns the resulting string in sp[0].

sqrt

Returns the square root of a value .

Usage:

sqrt( value 0

Parameters:

sp[0]

is the value

Returns the result in sp[0].

srand

Seeds the random number generator .

Usage:

srand( value )
srand( )

Parameters:

sp[0]

is the seed value, which may be uninitialized

Returns the previous seed value in sp[0].

stop

Finish a range pattern .

Usage:

(internal state)

Parameters:

none

strftime

Formats the given timestamp using the given format .

Usage:

strftime( format , timestamp , utc )
strftime( format , timestamp )
strftime( format )
strftime( )

Parameters:

Zero to three parameters may be on the stack. If all three are used, they are as follows:
sp[0]

is the utc flag

sp[-1]

is the timestamp value

sp[-2]

is the format

Returns the result in sp[0].

sub

Subtract the second value from the first .

Usage:

first - second

Parameters:

sp[0]

holds the second value

sp[-1]

holds the first value

Returns the result in sp[0].

sub_asg

Assign the difference of two values to a variable .

Usage:

target = first - second

Parameters:

cdp[0]

holds a reference to the variable to which to assign the result

sp[0]

holds the second value

sp[-1]

holds the first value

Stores the difference in the target , leaving sp[0] pointing to the target .

substr

eturns the substring of string s, starting at index i, of length n .

Usage:

substr(s,i,n)
substr(s,i)

Parameters:

Two or three parameters may be on the stack. If all three are used, they are as follows:
sp[0]

holds the length n .

sp[0]

holds the index i .

sp[0]

holds the string s .

system

Executes a command, returning the wait-status .

Usage:

status = system( command )

Parameters:

sp[0]

is the command to execute

Returns the wait-status in sp[0].

systime

Returns the current time of day as the number of seconds since the Epoch .

Usage:

systime( )

Parameters:

none

Returns the result in sp[0].

test

Test a logical expression .

Usage:

value

Parameters:

sp[0]

holds a value to test.

Returns the result on the evaluation stack, i.e., 1 if the value is nonzero and 0 otherwise.

tolower

Copy a string, converting to lowercase .

Usage:

tolower( value )

Parameters:

sp[0]

is the value to convert

Returns the result in sp[0].

toupper

Copy a string, converting to uppercase .

Usage:

toupper( value )

Parameters:

sp[0]

is the value to convert

Returns the result in sp[0].

uminus

Unitary minus .

Usage:

- value

Parameters:

sp[0]

contains a value to negate. As a side-effect, if the value is a string, it is cast to double floating point.

Returns the result in sp[0].

uplus

Unitary plus .

Usage:

+ value

Parameters:

sp[0]

contains a value to use. As a side-effect, if the value is a string, it is cast to double floating point.

Returns the result in sp[0].

REGULAR EXPRESSIONS

M_1J

mandatory jump

M_2JA

optional (undesirable) jump

M_2JB

optional (desirable) jump

M_2JC

pop position, optional jump (to continue looping) if advanced

M_ACCEPT

end of match

M_ANY

arbitrary character (.)

M_CLASS

character class

M_END

end of string ($)

M_ENTER

prepare an iteration by resetting the counter. This precedes a M_SAVE_POS .

M_LOOP

Like M_2JC , this is the last part of a conditional loop. It is used where one or both of the minimum and maximum iterations are known.

M_SAVE_POS

push position onto stack, at the beginning of a loop

M_START

start of string (ˆ)

M_STR

matching a literal string

M_U

arbitrary string (.*)