Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
PM-GAWK(1)			Utility Commands		      PM-GAWK(1)

NAME
     persistent memory gawk - persistent data and functions

SYNOPSIS
     truncate -s size heap.pma
     export GAWK_PERSIST_FILE=heap.pma
     gawk ...

     truncate -s size heap.pma
     GAWK_PERSIST_FILE=heap.pma gawk ...

     truncate -s size heap.pma
     alias pm='GAWK_PERSIST_FILE=heap.pma'
     pm gawk ...		       # succinct

     unset GAWK_PERSIST_FILE   # disable persistence

     export GAWK_PERSIST_FILE=other_heap.pma  # change heap

     rm heap.pma	       # delete heap

DESCRIPTION
     Gawk  5.2	and  later  supports  a persistent memory feature that can store
     script-defined variables and functions in a file for later use.   The  fea-
     ture,  called  pm-gawk, is described in GAWK: Effective AWK Programming and
     in Persistent Memory gawk User Manual.

     pm-gawk is activated by passing to gawk the  name	of  an	initially  empty
     (all-zero-bytes) heap file, via the environment variable GAWK_PERSIST_FILE.
     pm-gawk retains script-defined variables and functions in the heap file for
     use in subsequent gawk invocations.

     pm-gawk  offers  at least two advantages compared with the existing rwarray
     extension: it offers constant-time (``O(1) time'') access to individual el-
     ements of persistent associative arrays, and it  can  store  script-defined
     functions in addition to variables.

EXAMPLES
     Demonstrate persistent variables:
	    $ truncate -s 1G heap.pma		 # create heap file
	    $ export GAWK_PERSIST_FILE=heap.pma  # "ambient" env var
	    $ gawk 'BEGIN { print ++i }'
	    1
	    $ gawk 'BEGIN { print ++i }'
	    2
	    $ gawk 'BEGIN { print ++i }'
	    3

     To pass the environment variable on per-command basis:
	    $ unset GAWK_PERSIST_FILE
	    $ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
	    4
	    $ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
	    5
	    $ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
	    6

     To reduce visual clutter of per-command environment variable passing:
	    $ alias pm='GAWK_PERSIST_FILE=heap.pma'
	    $ pm gawk 'BEGIN { print ++i }'
	    7
	    $ pm gawk 'BEGIN { print ++i }'
	    8

     To refrain from activating persistence:
	    $ unset GAWK_PERSIST_FILE
	    $ gawk 'BEGIN { print ++i }'
	    1
	    $ gawk 'BEGIN { print ++i }'
	    1

     To permanently ``forget'' the contents of the heap file:
	    $ rm heap.pma

ENVIRONMENT VARIABLES
     GAWK_PERSIST_FILE	contains  the  name  of a heap file where script-defined
     variables and functions are stored.  If this environment  variable  is  not
     visible  to gawk, the persistence feature is not activated and gawk behaves
     in its traditional manner.

VERSION INFORMATION
     Persistent memory gawk was first released in gawk 5.2.

AUTHORS
     Arnold Robbins, the maintainer of gawk, implemented pm-gawk using a persis-
     tent memory allocator (pma) provided by Terence Kelly.  An  earlier  proof-
     of-concept  prototype  of	persistent gawk was developed by Haris Volos, Zi
     Fan Tan, and Jianan Li using a fork of the official gawk sources.

CAVEATS
     The GNU/Linux CIFS filesystem is known to cause problems for the persistent
     memory allocator. Do not use a backing file on such a filesystem  with  pm-
     gawk.

     pm-gawk produces a warning if the current version of gawk doesn't match the
     one that was first used with a particular backing storage file.

BUG REPORTS
     Follow  the procedures in GAWK: Effective AWK Programming and in Persistent
     Memory gawk User Manual.  For suspected bugs related to persistence (as op-
     posed to other non-persistence-related gawk bugs) please also  send  e-mail
     to  Terence  Kelly  at one or more of these addresses: tpkelly@acm.org, tp-
     kelly@eecs.umich.edu, or tpkelly@cs.princeton.edu.

SEE ALSO
     gawk(1), GAWK: Effective AWK Programming, and Persistent Memory  gawk  User
     Manual.   The two manuals should be available in the Info subsystem if Info
     installed on your system.

     See https://web.eecs.umich.edu/~tpkelly/pma/ for the latest source code and
     manual.

COPYING PERMISSIONS
     Copyright (C) 2022 Terence Kelly.

     Permission is granted to make and distribute verbatim copies of this manual
     page provided the copyright notice and this permission notice are preserved
     on all copies.

     Permission is granted to copy and distribute modified versions of this man-
     ual page under the conditions for verbatim copying, provided that	the  en-
     tire  resulting derived work is distributed under the terms of a permission
     notice identical to this one.

     Permission is granted to copy and distribute translations	of  this  manual
     page  into  another  language, under the above conditions for modified ver-
     sions, except that this permission notice may be stated  in  a  translation
     approved by the Foundation.

Free Software Foundation	  June 01 2025			      PM-GAWK(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pm-gawk&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help