How to set and read variables in SFK scripts to extract data in one command and reuse it in following commands.

sfk parameters and variables support

sfk script parameters

   -  look like %1 %2 %3 to %9,
      or with sfk for windows also like $1 $2 $3.

   -  are used with sfk script and call / label.

   -  are passed into the script or label command chain
      wherein they are never changed.

web reference

      --- file filt.bat begin ---
      sfk script %~f0 -from begin %*
      GOTO end
      sfk label begin
         +filter %1 %2
      --- file filt.bat end ---
      typing "filt.bat in.txt -+foo" will run sfk filter
      using the parameters "in.txt" and "-+foo".
      under windows %~f0 is the absolute batch filename
      itself including extension .bat or .cmd.

sfk global variables

   -  are set like:
      sfk setvar myvar="the test text" ...
      sfk echo foo +setvar myvar ...
      sfk xed in.txt "/foo*bar/[setvar myvar][part2][endvar]/" ...

   -  are used by further commands in the chain like:
      sfk ... +getvar myvar
      sfk ... +echo -var "using #(myvar)"
      sfk ... +xed "_<foo>*</foo>_[part1][getvar myvar][part3]_"
        to read or use variable contents by a pattern #(name)
        option -var must be given. this is to avoid unwanted
        side effects with commands that get "#(" in their
        input files or input text streams.

   -  allowed variable names:
      must start with a-z, then a-z0-9_

      sfk setvar file=in.txt +filter -var "#(file)" -+foo
         runs sfk filter, giving the input filename by variable.
      sfk xex in.txt "/foo=*/[setvar fooval][part2][endvar]/"
       +echo -var "foo is: #(fooval)"
         extract foo=(any text) from in.txt, place the found
         text into variable fooval, then print it. [19]

environment variable access

   can be done like #(env.varname). varname is case
   insensitive under windows and uses case on linux.

      sfk -var echo "tmp contains: #(env.TMP)"

sfk local command variables

   -  are created directly from input text
      produced by a previous command in the command chain

   -  are suppported only within some commands like
      sfk run "... $text ...."
         runs an external program once for every input line.
      sfk perline "... $text ..."
         runs sfk internal commands once for every input line.
      sfk filter -tabform "... $col1 ... $col2 ..."
         splits text lines by TAB char, allowing reformatting.
      type sfk run, sfk perline etc. for further infos.

sfk variable functions

   when reading variable text like #(varname) some extra
   functions can be applied using #(func(varname,...)).
   available functions are:

   strpos(v,'text')        get index of text within v
   strpos(v,-case 'text')  same, case sensitive
   strpos(v,-spat '\x20')  using slash patterns
   strrpos(v,'text')       search from right side
   substr(v,o[,l])         substring from offset o length l.
                           use negative o from right side.
   [l/r]trim(v)            strip whitespace at sides
   lpad(v,n)               fill left side up to n chars
   rpad(v,n)               fill right side up to n chars
   isset(v)                tells 1 if v is set, else 0
   strlen(v)               number of characters in v

   sfk -var setvar a="foo bar"
      +echo "#(substr(a,4,3))"    - prints 'bar'
      +echo "#(strpos(a,'bar'))"  - prints '4'
   sfk -var setvar a="foo"
      +echo "#(lpad(a,6))"        - prints '   foo'