Man Linux: Main Page and Category List


       ffe - flat file extractor


       ffe [options]...


       ffe  is  a  program  for  extracting  fields from flat file records and
       displaying them in different formats. ffe relies on  the  configuration
       file to control input file structure and the output format.


       ffe accepts the following options:

       -c, --configuration=file
              Read the configuration from file, default is ~/.fferc.

       -s, --structure=STRUCTURE
              Input file is processed using the structure STRUCTURE.

       -p, --print=FORMAT
              Use  output  format  FORMAT  for  printing.  All printing can be
              suppressed using format  no.  Original  data  is  printed  using
              format raw.

       -o, --output=NAME
              Write output to NAME instead of standard output.

       -f, --field-list=LIST
              Print  only  fields  and  constants specified in comma separated
              list LIST.

       -e, --expression=EXPRESSION
              Print only those records for which the EXPRESSION  evaluates  to

       -a, --and
              Expressions  are  combined  with logical and, default is logical

       -v, --invert-match
              Print only those records which don’t match the expression.

       -l, --loose
              An invalid input line does not cause program to abort.

       -r, --replace=FIELD=VALUE
              Replace FIELDs contents with VALUE in output. VALUE can  contain
              same directives as output option data.

       -d, --debug
              All invalid input lines are written to file ffe_error_<pid>.log.

       -I, --info
              Show the structure information in configuration file and exit.

       -?, --help
              List all available options and their meanings and exit.

       -V, --version
              Show version of program and exit.

       All remaining arguments are names of input files; if no input files are
       specified, then the standard input is read.

   Expressions (option -e, --expression)
       Expression  can  be  used  to  select  specific records comparing field

       If the value starts with string "file:" then the rest of the  value  is
       considered  as  a file name. Every line in the file is used as value in
       comparison. Record will be selected if one  or  more  values  evaluates

       Expression notation:

              A  record  will  be  selected if the field field is equal to the
              value value.

              A record will be selected if the field  field  starts  with  the
              value value.

              A  record will be selected if the field field contains the value

              A record will be selected if the field field is not equal to the
              value value.

              A record will be selected if the field field matches the regular
              expression in value.


       ffe uses the configuration file for extracting fields  from  the  input
       file  and  for  formatting  the fields for output. Every line or binary
       block  of  the  input  file  is  considered  as   a   record.   Default
       configuration  file is ~/.fferc but another file can be given with ’-c’

       Configuration file for ffe is a text file. The file may  contain  empty
       lines.   Commands   are  case-sensitive.  Comments   begin   with   the
       #-character and end at the  end  of  the  line.  The  string  and  char
       definitions can be enclosed in double quotation ’"’ characters. char is
       a single character. string and char can contain following escape codes:
       ’\a’,’\b’,’\t’,’\n’,’\v’,’\f’,  ’\r’,  ’\"’ and ’\#’. Character ’\’ can
       be escaped as ’\\’.

       Command Substitution allows the output of a command to replace parts of
       the configuration file. Syntax for command substitution is:
       The  command  is  executed  and  the  ‘command‘ is substituted with the
       standard output of the command, with  any  trailing  newlines  deleted.
       Command substitutions may not be nested.

       Before executing the command ffe sets few environment variables:

              The name of the structure given using -s,--structure.

              The name of the output file given using -o,--output.

              The name of the output format given using -p,--print.

              The name of the first input file.

              A list of all input files.

       If variable is already set it will not be replaced.

   Input file structure
       Input file structures are specified with keyword structure:

       structure name {options...}

       Options must be ended with newline, options are:

       type fixed|binary|separated [char] [*]
              Fields  in  the input are fixed length text fields, fixed length
              binary fields or text fields separated by char. If *  is  given,
              multiple  sequential  separators  are considered as one. Default
              separator is comma.

       quoted [char]
              Fields may be quoted with char, default quotation mark is double
              quotation  mark  ’"’.  A quotation mark is assumed to be escaped
              as \char or doubling the mark as charchar in input. Non  escaped
              quotation marks are not preserved in output.

       header first|all|no
              Controls  the  occurrence  of the header line. Default is no. If
              set as first or all, the first line of the first input  file  is
              considered  as  header  line containing the names of the fields.
              First means that only the first file has  a  header,  all  means
              that all files have a header, although the names are still taken
              from the header of  the  first  file.  Header  line  is  handled
              according   the   record   definition,  meaning  that  the  name
              positions, separators etc. are the same as for the fields.

       output name
              All records  belonging  this  structure  are  printed  according
              output format name. Default is to use output named as ’default’.

       record name {options...}
              Defines one record for a  structure.  A  structure  can  contain
              several record types.

   Record options:
       id position string

       rid position regexp
              Identifies a record in the input file. Records are identified by
              the string or by the  regular  expression  in  regexp  in  input
              record  position position. For fixed length and binary input the
              position is the byte  position  of  the  input  record  and  for
              separated  input the position means the position’th field of the
              input record. Positions start from one.

              Id’s are required  only  if  input  structure  contains  several
              record  types  with equal lengths or field counts. Non printable
              characters can be escaped as \xnn where nn  is  the  hexadecimal
              value of the character.

              A record definition can contain several id’s, then all id’d must
              match the input line (id’s are combined with logical and).

              In a multi-record binary structure every  record  must  have  at
              least one id.

       field name|FILLER|* [length]|* [lookup]|* [output]
              Specifies  one  field  in  a  text  input  structure.  length is
              mandatory for fixed length input structure except for  the  last
              field. If the last field of a fixed length input structure has a
              * in place of length then the  last  field  can  have  arbitrary

              Length  is  also used for printing fields in fixed length format
              using the %D directive. The order  of  fields  in  configuration
              file is essential, it specifies the field order in a record.

              If  ’*’  is  given instead of the name,  then the ’name’ will be
              the ordinal number of the field, or if the ’header’  option  has
              value  ’first’  or  ’all’, then the name of the field will taken
              from the header line (first line of the input).

              If lookup is given then the fields contents is used to   make  a
              lookup   in  lookup  table  lookup.  If  length  is  not  needed
              (separated format) but lookup is needed,  use  asterisk  (*)  in
              place of length definition.

              If  output  is  given  field is printed using output output. Use
              asterisk in place of lookup if lookup is not needed.

              Naming the field as FILLER causes field not  to  be  printed  in

       field name|FILLER|* [length]|type [lookup]|* [output]
              Specifies  one  field  in  a  binary  input structure. All other
              features are same as for the  text  structure  except  the  type
              parameter.   type  specifies  field data type and length and can
              have the following values:

              char Printable character.

              short Short integer having current system length and byte order.

              int Integer having current system length and byte order.

              long Long integer having current system length and byte order.

              llong  Long  long  integer having current system length and byte

              ushort Unsigned short integer having current system  length  and
              byte order.

              uint  Unsigned  integer  having  current  system length and byte

              ulong Unsigned long integer having  current  system  length  and
              byte order.

              ullong  Unsigned  long long integer having current system length
              and byte order.

              int8 8 bit integer.

              int16_be Big endian 16 bit integer.

              int32_be Big endian 32 bit integer.

              int64_be Big endian 64 bit integer.

              int16_le Little endian 16 bit integer.

              int32_le Little endian 32 bit integer.

              int64_le Little endian 64 bit integer.

              uint8 Unsigned 8 bit integer.

              uint16_be Unsigned big endian 16 bit integer.

              uint32_be Unsigned big endian 32 bit integer.

              uint64_be Unsigned big endian 64 bit integer.

              uint16_le Unsigned little endian 16 bit integer.

              uint32_le Unsigned little endian 32 bit integer.

              uint64_le Unsigned little endian 64 bit integer.

              float Float having current system length and byte order.

              float_be Float having current system length and big endian  byte

              float_le  Float  having  current system length and little endian
              byte order.

              double Double having current system length and byte order.

              double_be Double having current system  length  and  big  endian
              byte order.

              double_le  Double having current system length and little endian
              byte order.

              bcd_be_len Bcd number having  length  len  and  nybbles  in  big
              endian order.

              bcd_le_len  Bcd  number  having length len and nybbles in little
              endian order.

              hex_be_len Hexadecimal data in big endian  order  having  length

              hex_le_len Hexadecimal data in little endian order having length

              If length is given instead  of  the  type,  then  the  field  is
              assumed to be a printable string having length length. String is
              printed until length characters are printed or NULL character is

              Bcd  number  (bcd_be_len  and  bcd_le_len)  is printed until len
              bytes are read or a nybble having hexadecimal value f is  found.
              Bcd  number  having  big  endian order is printed in order: most
              significant nybble first and least significant nybble second and
              bcd number having little endian order is printed in order: least
              significant nybble first and  most  significant  nybble  second.
              Bytes are always read in big endian order.

              Hexadecimal  data  (hex_be_len  and  hex_le_len)  is  printed as
              hexadecimal values. Big endian data is printed starting from the
              lower  address  and  little  endian data starting from the upper

       field-count number
              Same effect as having field * number times.  Because  length  is
              not specified, this works only with separated structure.

       fields-from record
              Fields for this record are the same as for record record.

       output name
              This  record is printed according output format name. Default is
              to use output format specified in the structure.

   Output definitions
       There can be several output  definitions  in  the  configuration  file.
       Format  can  be  selected  with ’-p’ option. Default format is named as

       output name|default {options...}
              Defines one output format. Output named  as  ’default’  will  be
              used  if none is given for structure or record, or none is given
              with option ’-p’.

              There is two predefined output formats no and raw. no suppresses
              all printing and raw prints the original input data.

   Output options:
       Pictures in output definition can contain printf-style %-directives:

       %f     Name of the input file.

       %s     Name of the current structure.

       %r     Name of the current record.

       %o     Input record number in current file.

       %O     Input record number starting from the first file.

       %i     Byte  offset  of  the current record in the current file. Starts
              from zero.

       %I     Byte offset of the current record starting from the first  file.
              Starts from zero.

       %n     Field name.

       %t     Field contents, without leading and trailing whitespaces.

       %d     Field  contents.  Binary  integer is printed as a decimal value.
              Floating point number is printed in the style [-]ddd.ddd,  where
              the number of digits after the decimal-point character is 6. Bcd
              number is printed as a decimal number and  hexadecimal  data  as
              consecutive hexadecimal values.

       %D     Field  contents,  right  padded  to  the  field length (requires
              length definition for the field).

       %x     Unsigned hexadecimal value of a binary integer. Other fields are
              printed using directive %d.

       %l     Value from lookup.

       %L     Value  from  lookup,  right padded to the field length (requires
              length definition for the field).

       %e     Does not print anything, causes still the "field empty" check to
              be  performed.  Can  be  used  when  only the names of non-empty
              fields should be printed.

       %p     Fields start position in a record. For fixed structure  this  is
              field’s  byte  position  in  the  input  line  and for separated
              structure this is the ordinal number of the field.  Starts  from

       %%     Percent sign.

       file_header picture
              Picture is printed once before file contents.

       file_trailer picture
              Picture is printed once after file contents.

       header picture
              If specified, then the header line describing the field names is
              printed before records. Every field  name is  printed  according
              the  picture  using  the  same  separator  and  fields length as
              defined for the fields. Picture can contain only %n directive.

       data picture
              Field contents is printed according picture.

       lookup picture
              If field is mapped to lookup table, this picture  will  be  used
              instead  of picture from data option. If not given, then picture
              from data will be used.

       separator string
              All fields are terminated by string, except the  last  field  of
              the record. Default is not to print separator.

       record_header picture
              picture  is printed before the record content. Default is not to
              print header.

       record_trailer picture
              picture is printed after the record content. Default is newline.

       justify left|right|char
              Fields  are  left  or  right  justified.  char  justifies output
              according the first occurrence of  char  in  the  data  picture.
              Default is left.

       indent string
              Record  contents  is  intended  by  string.  Field  contents  is
              intended by two times the string. Default is not to indent.

       field-list name1,name2,...
              Only fields or constants named as name1,name2,...  are  printed,
              same  effect  as  has  ’-f’  option. Default is to print all the
              fields. Fields are also printed in the same order  as  they  are

       no-data-print yes|no
              When  set  as no and field-list is given, suppresses printing of
              record_header and record_trailer in case  where  current  record
              contains none of the fields specified in field-list.

       field-empty-print yes|no
              When  set  as  no,  nothing  is printed for fields which consist
              entirely of characters from empty-chars. If none of  the  fields
              of  a  record are printed then the printing of record_trailer is
              also suppressed. Default is yes.

       empty-chars string
              string specifies a set of characters  which  define  an  "empty"
              field.  Default  is  "  \f\n\r\t\v"  (space, form-feed, newline,
              carriage return, horizontal tab and vertical tab)

   Lookup definitions
       lookup name {options...}
              Defines one lookup table.

   Lookup options:
       search exact|longest
              The search type for lookup table.

       default-value value
               value is printed if the lookup is not successful.

       pair key value
              One key/value pair for the lookup table.

       file name [separator]
              Key/value  pairs  are  read  from  file  name.  Every  line   is
              considered  as  a key/value pair separated by separator. Default
              separator is semicolon.

       Additional to input fields constants values can be printed using option
       -f,--field-list  or  output option field-list. Constant will be printed
       using data output option.

       Constants are specified as

       const name value
              when the name appears in a field list, value will be printed for
              every record as the name were one of the input fields.


       Example    of    fixed    length    flat    file    containing   fields
       ’FirstName’,’LastName’ and ’Age’:

       John     Ripper       23
       Scott    Tiger        45
       Mary     Moore        41

       This file can be printed in XML with the following configuration:

       structure personnel {
           type fixed
           output XML
           record person {
               field FirstName 9
               field LastName  13
               field Age 2

       output XML {
           file_header "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
           data "<%n>%d</%n>\n"
           record_header "<%r>\n"
           record_trailer "</%r>\n"
           indent " "


       More examples in Texinfo manual. If  the  info  and  ffe  are  properly
       installed, the command

              info ffe

       should give more information.


       Timo Savinen <>