###############################################################################
# This is a file for mapping parser entries to PBS Attributes
# tip: disable soft wrap in your text editor to work with this file
###############################################################################

###############################################################################
# Formatting:
# lines starting with # are ignored
# empty lines are ignored
#
# separator: "::"
# 
# attribute entry:
# Parser Key ID :: PBS Key ID
#
# The File is internally treated as a List
# Parser Key ID is a regular expression, case ignoring
# First match (top/down) will overwrite other possible matches
###############################################################################

job_id :: PBSJOB_NAME
Job_Name :: PBSJOB_DESCRIPTION
job_state :: PBSJOB_STATE
Job_Owner :: PBSJOB_OWNER
queue :: PBSJOB_QUEUE
server :: PBSJOB_SERVER
Checkpoint :: PBSJOB_CHECKPOINT
Error_Path :: PBSJOB_ERRORPATH
exec_host :: PBSJOB_EXECHOST
Hold_Types :: PBSJOB_HOLDTYPES
Join_Path :: PBSJOB_JOINPATH
Keep_Files :: PBSJOB_KEEPFILES
Mail_Points :: PBSJOB_MAILPOINTS
Output_Path :: PBSJOB_OUTPUTPATH
Priority :: PBSJOB_PRIORITY
Rerunable :: PBSJOB_RERUNABLE
session_id :: PBSJOB_SESSIONID


