Server for Information Technologies ������ ��������������
������� �������������� ����������
(095) 932-9212, 932-9213, 939-0783
E-mail: [email protected]
������ �������� ����(!) ������������� ���������� CIT Forum CD-ROM

AWK(1)

��������
awk - ������������� � ��������� � �������������� ������

���������

  awk  [-F������] [[-f] ���������] [�������� ...] [���� ...]

��������
������� awk ������������ ������ �������� ������ � ���������, ������������� � ���������. ������� ����� ������ ���� ��������������� � ��������� ������, ���� ��������� � ���� � ������ ��������� � ��������������� ������ -f. ���� ������� ������� � ��������� ������, �� ������� ��������� � ��������� ������� ('), ����� �������� ������������� shell'��.

������� awk ����� ���� �������� ��������� � ���� x=... y=... � �.�. (��. �������).

����� �������� � ��� �������, ��� ��� ������. ���� �� ������� �� ������ ����� ��� ������ ��� -, ������������ ����������� ����. ���� ��� awk ������� �� ������, ����������� ����������� ��������. �� ��������� ��� ������� ������; � ����� ������ awk ������������ ���� ���������. ����������� ������� ����� ��������, ������������� ���������� RS. ������ ������ ������� �� ����, ������������ ������������� ����� (�� ��������� - ���������). ���� ����������� ����� ��������, ������������� ���������� FS ��� ������ ���� -F������. ���� �������� ����� �������� �� ������ $1, $2,...; $0 - ��� ������� ������.

��� ������� ������� �� ��������� ����� ���� ������ ��������, ������� ����� ����������� �� ������ �������, ������� �������������� � ��������. �������� ������-�������� ����� ���:

   ������ { �������� }
������ �������� ������ �������������� � ������ �� ��������; � ������ ������ ����������� ��������� ��������. ����� ������������� �� ����� ��������� �������� ��������� ������ � ������� ������������� �����������. ����� ���� ������ ���� ������, ���� ��������, �� �� ��� ������. ���� ��� ������� ������� �� ������� ��������, �� ������ ������ ���������� �� ����������� �����. ���� ��� �������� �� ��������� ������, �� ��� ����� ����������� ��� ������ ������� ������. ������, ������� �� ������� ����������� �� ������ �������, ������������.

�������� ���� ������������������ ����������. ��� ��� ������� � �������� ����� ���� �������, ��, ����� ��������� �� � ���������, ��������� ���� ����� � �������� ������. �������� ���� ���� �� �����������:

   if ( ������� ) �������� [ else �������� ]
   while ( ������� ) ��������
   for ( ���������; �������; ��������� ) ��������
   break
   continue
   { [ �������� ] ... }
   ���������� = ���������
   print [ ������_��������� ] [> ��������� ]
   printf ������ [, ������_��������� ] [> ��������� ]
   next  # ���������� ���������� ������� � ������� �
   ��������� ������
   exit  # ���������� ���������� ������

��������� ����������� ������ � �������, ��������� ������ ��� ������ �������. ������ ������_��������� �������� ��� ������. ��������� �������� �� ������� �������� � ����� � ������� �������� +, -, *, /, % � ������������ (������������ ��������). � ���������� ����� ����� ������������ �������� �� ����� C: ++, --, +=, -=, *=, /=, %=. ���������� ���������������� ������� ���������. ���������� ����� ���� ���������, ���������� ������� (������������ x[i]) ��� ������. ��������� ������� ����� ������� ����� (�� ����������� ��������) ������� ��������, ��� ��������� ����������� ������������� ������������� ������. ������� �������� ����������� � ������� ������� (").

�������� print ������ ���� ��������� �� ����������� ����� (��� � ����, ���� ������������ ����� >���������), �������� �� ������� ������������ ����� � �������� ������ ������ �������� ������������ �������. �������� printf ������ �� �� �����, �� ��� ����������� ������� [��. printf(3S)].

���������� ������� length ���������� ����� ������ ���������, ������������ ��� ��� ������� ��������; ���� �������� ������, �� ������������ ����� ������� ������. ���������� ����� ��������� ���������� �������: exp, log, sqrt � int (int ����������� ������� ����� ������ ���������). ������� substr(s, m, n) ���������� n-���������� ���������� ������� s, ������������ � ������� m. ������� sprintf(������, ���������, ���������,...) ����������� ��������� � ������������ � ��������� �������� [��. printf(3S)] � ���������� ���������� ������� ��������.

������ - ��� ������������ ���������� ����������, ������������ � ������� �������� !, ||, && � ������ �� ���������� ��������� � ��������� ���������. ���������� ��������� ����������� ��������� / [��������� ��. egrep(1)]. ��������� ���������� ��������� � ������� �������������� �� ���� �������. ���������� ��������� ����� ������� � � ��������� ���������. ������ ����� �������� �� ���� ��������, ����������� �������; ��� ���� ��������� �������� ����������� ��� ���� ����� ����� �������, ��������������� ������� �������, � �������, ��������������� ������� �������.

��������� ��������� - ��� ���� �� ��������� �����������:

   ���������  ����_������  ����������_���������
   ���������  ����_�����  ���������

��� ����_����� - ����� �� ����� �������� ��������� ����� C, ����_������ ��� ~ (����������) ��� !~ (�� ����������).

������� - ��� �������������� ���������, ��������� ��������� ��� �� ���������� ����������.

��� ���������� �����-���� �������� ����� ������ ��� ����� ��������� ������ ���������� ����������� ������� BEGIN � END. BEGIN ������ ���� ������ ��������, END - ���������. ��������, ��� ������������� ������� c � �������� ����������� ����� ����� ���� ��������� ��������� � ������ -Fc, ���� �������

   BEGIN { FS = c }
��������� ����������� ����������:
NF
���������� ����� � ������� ������.
NR
���������� ����� ������� ������.
FILENAME
��� �����, �� �������� � ������ ������ ������������ ����.
OFS
����������� ����� ��� ������, �� ��������� ������.
ORS
����������� ������� ��� ������, �� ��������� ������� ������.
OFMT ������ ������ �����, �� ��������� %.6g.

�������

  1. ������� ������ ����� f1, ���������� ����� 72 ��������:
       awk  'length > 72' f1
    
  2. ������� ������ ��� ���� ����� f2 � �������� �������:
       awk  '{ print $2, $1 }' f2
    
  3. ������� �����, ������� � ������ ������� ����� f3, ������� ����� � ������� ��������������:
    � ����� prog:
    { s += $1 }
       END  { print "sum is", s, " average is", s/NR }
    
    ��������� ������:
       awk -f prog f3
    
  4. ������� ���� ����� f4 � �������� �������:
       awk  '{ for (i = NF; i > 0; --i) print $i }' f4
    
  5. ������� ��� ������ ����� f5, ����������� ����� ������ start/stop
       awk  '/start/,/stop/' f5
    
  6. ������� �� ������ ����� f6, � ������� ������ ���� �� ��������� � ������ ����� ���������� ������:
       awk  '$1 != prev { print; prev = $1 }' f6
    
  7. ����������� ���� f7, �������� ����� ����� "Page" ����� �������, ������� � �����:
    � ����� prog:
       /Page/ { $2 = n++ }
      { print }
    
    ��������� ������:
       awk  -f prog n=5 f7
    

��. �����
egrep(1), lex(1), sed(1).
printf(3S) � ����������� ������������.

��������
������� ������� �� ����������� ��� ������, ���� ���� ���� ������ ������������ ����������.

� ����� ������� awk ����������� ����� �������������� ����� ��������� �������� � �������. ����� ��������� ������������ ��� �����, ��������� � ���� 0; ����� ������������ ��� ������� - ��������������� ��� � ������ �������� ""
Comments: [email protected]
Designed by Andrey Novikov
Copyright © CIT