AWK.9
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:9k
源码类别:

操作系统开发

开发平台:

C/C++

  1. Command:   awk - pattern matching language
  2. Syntax:    awk rules [file] ...
  3. Flags:     (none)
  4. Examples:  awk rules input          # Process input according to rules
  5.            awk rules -  >out        # Input from terminal, output to out
  6.      AWK is a programming  language  devised  by  Aho,  Weinberger,  and
  7. Kernighan  at Bell Labs (hence the name).  Awk programs search files for
  8. specific patterns and performs 'actions' for every occurrence  of  these
  9. patterns.   The  patterns can be 'regular expressions' as used in the ed
  10. editor.  The actions are expressed using a subset of the C language.
  11.      The patterns and actions are usually placed in a 'rules' file whose
  12. name  must  be  the  first argument in the command line, preceded by the
  13. flag -f.  Otherwise, the first argument on the command line is taken  to
  14. be  a  string  containing  the rules themselves. All other arguments are
  15. taken to be the names of text  files  on  which  the  rules  are  to  be
  16. applied,  with  -  being  the  standard  input.   To take rules from the
  17. standard input, use -f -.
  18.      The command:
  19.         awk  rules  prog.d*u
  20. would read the patterns and actions rules from the file rules and  apply
  21. them to all the arguments.
  22.      The general format of a rules file is:
  23.    <pattern> { <action> }    <pattern> { <action> }    ...
  24. There may be any number of these <pattern> { <action> } sequences in the
  25. rules  file.   Awk reads a line of input from the current input file and
  26. applies every <pattern> { <action> } in sequence to the line.
  27.      If the <pattern> corresponding to any { <action> } is missing,  the
  28. action  is  applied to every line of input.  The default { <action> } is
  29. to print the matched input line.
  30. Patterns
  31.      The <pattern>s may consist of  any  valid  C  expression.   If  the
  32. <pattern>  consists of two expressions separated by a comma, it is taken
  33. to be a range and the <action> is performed on all lines of  input  that
  34. match the range.  <pattern>s may contain 'regular expressions' delimited
  35. by an @ symbol.  Regular expressions can be thought of as a  generalized
  36. 'wildcard'  string  matching  mechanism,  similar  to  that used by many
  37. operating systems  to  specify  file  names.   Regular  expressions  may
  38. contain any of the following characters:
  39.                                                                         
  40.                                                                         
  41.    x     An ordinary character
  42.         The backslash quotes any character
  43.    ^     A circumflex at the beginning of an expr matches the  beginning
  44.          of a line.
  45.    $     A dollar-sign at the end of an expression matches the end of  a
  46.          line.
  47.    .     A period matches any single character except newline.
  48.    *     An expression followed by an  asterisk  matches  zero  or  more
  49.          occurrences of that expression: 'fo*' matches 'f', 'fo', 'foo',
  50.          'fooo', etc.
  51.    +     An expression followed by a  plus  sign  matches  one  or  more
  52.          occurrences  of  that  expression:  'fo+'  matches 'fo', 'foo',
  53.          'fooo', etc.
  54.    []    A  string  enclosed  in  square  brackets  matches  any  single
  55.          character  in  that  string,  but  no  others.   If  the  first
  56.          character in the string is a circumflex, the expression matches
  57.          any  character except newline and the characters in the string.
  58.          For example, '[xyz]' matches 'xx'  and  'zyx',  while  '[^xyz]'
  59.          matches  'abc'  but  not  'axb'.   A range of characters may be
  60.          specified by two characters separated by '-'.
  61. Actions
  62.      Actions are expressed as a subset of the C language.  All variables
  63. are  global  and  default to int's if not formally declared. Only char's
  64. and int's and pointers and arrays of char  and  int  are  allowed.   Awk
  65. allows  only  decimal  integer  constants to be used----no hex (0xnn) or
  66. octal (0nn). String and character  constants  may  contain  all  of  the
  67. special C escapes (n, r, etc.).
  68.      Awk supports the 'if', 'else', 'while' and 'break' flow of  control
  69. constructs, which behave exactly as in C.
  70.      Also supported are the following unary and binary operators, listed
  71. in order from highest to lowest precedence:
  72.    Operator          Type           Associativity
  73.    () []             unary          left to right
  74.    ! ~ ++ -- - * &   unary          right to left
  75.    * / %             binary         left to right
  76.    + -               binary         left to right
  77.    << >>             binary         left to right
  78.    < <= > >=         binary         left to right
  79.    == !=             binary         left to right
  80.    &                 binary         left to right
  81.    ^                 binary         left to right
  82.    |                 binary         left to right
  83.    &&                binary         left to right
  84.    ||                binary         left to right
  85.    =                 binary         right to left
  86.                                                                         
  87.                                                                         
  88. Comments are introduced by a '#' symbol and are terminated by the  first
  89. newline  character.   The  standard '/*' and '*/' comment delimiters are
  90. not supported and will result in a syntax error.
  91. Fields
  92.      When awk reads a line from the current input file,  the  record  is
  93. automatically  separated  into  'fields.'  A field is simply a string of
  94. consecutive characters delimited by either the beginning or end of line,
  95. or  a  'field separator' character.  Initially, the field separators are
  96. the space and tab character.  The special unary operator '$' is used  to
  97. reference  one  of  the  fields in the current input record (line).  The
  98. fields are numbered sequentially starting at  1.   The  expression  '$0'
  99. references the entire input line.
  100.      Similarly, the 'record separator' is used to determine the  end  of
  101. an  input 'line,' initially the newline character.  The field and record
  102. separators may be changed programatically by one of the actions and will
  103. remain in effect until changed again.
  104.      Multiple (up to 10) field separators are allowed  at  a  time,  but
  105. only one record separator.
  106.      Fields behave exactly like strings; and can be  used  in  the  same
  107. context  as a character array.  These 'arrays' can be considered to have
  108. been declared as:
  109.      char ($n)[ 128 ];
  110. In other words, they are 128 bytes long.  Notice  that  the  parentheses
  111. are  necessary  because  the  operators [] and $ associate from right to
  112. left; without them, the statement would have parsed as:
  113.      char $(1[ 128 ]);
  114. which is obviously ridiculous.
  115.      If the contents of one of these field arrays is altered,  the  '$0'
  116. field will reflect this change.  For example, this expression:
  117.      *$4 = 'A';
  118.                                                                         
  119.                                                                         
  120. will change the first character of the fourth field to  an  upper-  case
  121. letter 'A'.  Then, when the following input line:
  122.      120 PRINT "Name         address        Zip"
  123. is processed, it would be printed as:
  124.      120 PRINT "Name         Address        Zip"
  125. Fields may also be modified with the strcpy() function (see below).  For
  126. example, the expression:
  127.      strcpy( $4, "Addr." );
  128. applied to the same line above would yield:
  129.      120 PRINT "Name         Addr.        Zip"
  130. Predefined Variables
  131.      The following variables are pre-defined:
  132.    FS             Field separator (see below).
  133.    RS             Record separator (see below also).
  134.    NF             Number of fields in current input record (line).
  135.    NR             Number of records processed thus far.
  136.    FILENAME       Name of current input file.
  137.    BEGIN          A special <pattern>  that  matches  the  beginning  of
  138.                   input text.
  139.    END            A special <pattern> that  matches  the  end  of  input
  140.                   text.
  141. Awk also provides some useful built-in functions for string manipulation
  142. and printing:
  143.    print(arg)     Simple printing of strings only, terminated by 'n'.
  144.    printf(arg...) Exactly the printf() function from C.
  145.    getline()      Reads the next record and returns 0 on end of file.
  146.    nextfile()     Closes the current input file  and  begins  processing
  147.                   the next file
  148.    strlen(s)      Returns the length of its string argument.
  149.    strcpy(s,t)    Copies the string 't' to the string 's'.
  150.    strcmp(s,t)    Compares the 's' to 't' and returns 0 if they match.
  151.    toupper(c)     Returns its character  argument  converted  to  upper-
  152.                   case.
  153.                                                                         
  154.                                                                         
  155.    tolower(c)     Returns its character  argument  converted  to  lower-
  156.                   case.
  157.    match(s,@re@)  Compares the string 's' to the regular expression 're'
  158.                   and  returns  the  number  of  matches  found (zero if
  159.                   none).
  160. Authors
  161.      Awk was written by Saeko Hirabauashi and Kouichi Hirabayashi.
  162.