AWK �ˤ��ǡ�������(1)

�ܼ�

AWK �Ȥ�

Awk �� �ե���������� ��Ū�Ȥ����� ���� �ץ���������Ǥ��� grep ���� �ѥ������ �ޤ� �Ԥ� ɽ������ �Τ� �Ф��ơ� awk �� �ѥ������ ������ ���������� �ƤФ�� ������ �Ԥʤ��ޤ���

�Ϥ����

���ޡ� ���ʤ��� �бĤ��� ��Ҥˡ� Beth, Dan, Kathy, Mark, Mary, Susie �� 6�ͤ� ���Ȱ��� ���ơ� ���줾�졢 �㤦 ���ֵ�� ������ä� ����� ���ޤ��� �ޤ��� ���β�Ҥ� �ե�å��� ���������� �ȤäƤ��� ���줾�줬 Ư���Ƥ��� ���֤� �㤦 �Ȥ��ޤ���

���뽵�� ��̳���֤� ɽ�� �����Τ� �ʲ��� �Ȥ���ǡ� ���� �ǡ����� emp.dat �� ����̾�� �ե������ ��ä� ���� ���Ȥ� ���ޤ���

Beth	4.00	0
Dan	3.75	0 
Kathy	4.00	10 
Mark	5.00	20 
Mary	5.50	22
Susie	4.25	18
������ ���ʤ����� �������֤�� ¿�� Ư���� ���Ƥ� ���Ȱ��� ̾���� �¶� �� ɽ�������� �� ���ޤ��� ���ΤȤ��� awk �� �Ȥäơ� ���� �褦�� ���� ����� �褤���Ȥ� �ʤ�ޤ���
sw99% awk '$3> 0 { print $1, $2 * $3 } ' emp.dat
Kathy   40
Mark   100
Mary   121
Susie 76.5
���� ���ޥ�ɥ饤��ϡ� ������� ��� �ץ������� �Ȥäơ� ���ϥե����� emp.dat ���� �ǡ����� �ɤ߹���� awk �������� �褦�� ���Ƥ��ޤ���

������� ��� �ץ������ϡ� �ѥ��������ȡ� �С� �� �Ϥޤ줿 ����������� �� ʬ��� ���ޤ��� �ѥ����� $3 > 0 �Ǥϡ� 3 ���ܤ� �󤬡� ������� �礭���褦�� �Ԥ� Ŭ�礹�� ���Ȥ� ɽ���ޤ��� ��������� { print $1, $2 * $3} �ǡ����줾�� Ŭ�礷�� �Ԥ� ��1�� ��2��� ��3��Ȥ��� �� ɽ������ ���Ȥ� �ؼ����ޤ���

$ �� >, { ,} �� ���ä� ʸ������ C������� �ü�� ��̣�� ���Ĥ��ᡢ ���󥰥륯������ �ʡǡ� �� ���������פ��Ƥ��� ���Ȥˤ� ���դ��� ����������

Ư���ʤ��ä� ���Ȱ��� ̾���� ��������ˤϡ� ���� �褦�� ���ޤ���

sw99% awk '$3 == 0 { print $1 } ' emp.dat
Beth
Dan
�����Ǥϡ� �ѥ����� $3 == 0 �� 3���ܤ� �� ������ �������褦�� �Ԥ� Ŭ�礷�� ��������� { print $1} �� ���� �Ԥ� �ǽ�� ��� ɽ�����ޤ���

Awk��

Awk �ץ������� �ҤȤİʾ�Ρ� �ѥ����� { ���������} �� �� ���� �ʤä� ���ޤ��� ���� �褦�� ���ޥ�ɹԤ� ���Ϥ��� �ߤƲ�������ʣ���Ԥ� �錄�ä� ���ޥ�ɤ� ���Ϥ� �ʤ�ޤ��Τǡ� �꥿����� ������ ���ޤäƤ��� �ְ㤤�� ���� �դ����� Ctrl+C �����Ǥ��� �ǽ餫�� ����� ��������
sw99% awk \
'$3 > 0 { print $1, $2 * $3 } \
$3 == 0 { print $1 } ' emp.dat 
Beth
Dan
Kathy 40
Mark 100
Mary 121
Susie 76.5
���줾��� �ѥ����� Ŭ�礹�� �Ԥˡ� ���������� ������ �ʤ���Ƥ��� ���Ȥ� �狼��� �פ��ޤ���

�ѥ����� ���������� �ɤ��餫�� ��ά���� ���Ȥ� �Ǥ��ޤ��� ���������� ��ά�����Ȥ��� ���ι� ���Τ� ɽ������ޤ��� ��grep�� Ʊ���� �ʤ�ޤ��� �ѥ������ ��ά���� �Ȥ��ϡ� ���Ƥ� �Ԥ� �Ĥ��� ���������� ������ �Ԥʤ��ޤ��� �Ǥ����顢 emp.dat �� ���� ���Ȱ��� ̾���� ���� ɽ������ˤϡ� ���� �褦�� ����� �褤���Ȥ� �ʤ�ޤ���

sw99% awk ' { print $1 } ' emp.dat
Beth
Dan
Kathy
Mark
Mary
Susie

Awk �μ¹�

Awk �� �ե��륿�� ���ޥ�ɤǤ� ����ޤ��� �⤷�� �о� �ե������ ���꤬ �ʤ��Ȥ��� ɸ������ ����� �Ԥ� �������ޤ���
sw99% cat emp.dat | awk ' { print $1 } '
Awk �ץ�����ब Ĺ�� �ʤ�ȡ� ���ޥ�� �饤��� �������� ���Ҥ���Τ� ���ݤǤ��� ���顼�� �����ä� �Ȥ��� �б��� �Ǥ��ʤ� �ʤ�ޤ��� ���Τ��ᡢ awk �ץ������� �ե������ ���Ҥ��� �������Ȥ� �Ǥ��ޤ��� ���� �褦�� ��Ȥ� �ե������ pay.awk �Ȥ��� ̾���� �������ޤ��礦��
$3 > 0 { print $1, $2 * $3 }
$3 == 0 { print $1 }
Awk �� ��ư���� ���ˡ� -f ���ץ����� �ץ������ �ե������ ���ꤹ�� ���Ȥ� �Ǥ��ޤ���
sw99% awk -f pay.awk emp.dat 

ñ��ʽ���

�����ιԤ�ɽ��

printʸ�� ������ �����ʤ����� ���Ϲ� ���Τ�Τ� ɽ�����ޤ��� �Ǥ����顢
{ print }
�� ���� ������Τ� ���� ɽ������ ���Ȥ� �ʤ�ޤ��� �ޤ�, $0 �� �����Τ� ����路�ޤ��Τǡ� ���ʤ����Ȥ�
{ print $0}
�Ǥ� �Ǥ��뤳�Ȥ� �ʤ�ޤ���

��������ɽ��

printʸ�� 1�� �ʾ�� ���ܤ� Ʊ�� �Ԥ� ���Ϥ��� ���Ȥ� �Ǥ��ޤ��� �㤨�С� ���줾��� ���ϹԤ� �ǽ�� 3���ܤ� ��� ɽ������ �ץ������� ���� �褦�� �ʤ�ޤ���
{ print $1,$3 }

��ο�NF

��� �ֹ�� ɽ�� �ѿ��� $ �� ��� �� ���Ȥ� �Ǥ��ޤ��� �㤨�С� �ѿ� NF �� ���ߤ� ���ϹԤ� ��� ���� ���ä� ���ޤ��� �������äơ�
{ print NF, $1, $NF }
�����ϹԤ���ο��ȡ����ιԤκǽ�ȺǸ��ɽ�����ޤ���

�׻�

{ print $1, $2 * $3 }
�Τ褦�� �׻����� �񤤤ơ� ���� ��̤� ɽ�������� ���Ȥ� �Ǥ��ޤ��� Awk �Ǥϡ�+(��)�� -(��)�� *(��)�� /(��) �� �ۤ��� C����� �Ȥ��� ���ޤ��ޤ� �黻�� ���� �Ǥ��ޤ���

���ֹ��ɽ��

�ѿ� NR �� ����ޤǤ� �ɤ߹���� �Ԥ� ���� ���ä� ���ޤ��� ���ϹԤ� �ƹԤ� ���ֹ�� �դ�ˤϡ� ���� �褦�� �ץ������ �� �Ѥ��ޤ���
{ print NR, $0 }

ʸ�Ϥν���

��� �׻���̤� �֤� ʸ���� ɽ������ ���Ȥ� �Ǥ��ޤ���
{ print "Total pay for", $1, "is", $2 * $3 }
���Τۤ��ˡ� printf �� ���� �ؿ��� �Ȥ��ȡ� ����� �Ťä� ɽ���� ���� ���Ȥ� �Ǥ��ޤ��� ���� ��ˡ�� �Ĥ��Ƥϡ� C ����� printf �� ���äƤ��顢 ���ͽ�� ���� �Ф��� ��������

�ѥ�����ˤ������

Awk �Ǥ� �ѥ��������� �Ȥäơ� ��̣�� ���� �Ԥ����� ����Ǥ��ޤ��� ����ˤ� ���ޤ��ޤ� ��ˡ�� �Ѥ��� ���Ȥ� �Ǥ��ޤ���

��Ӥˤ������

$2 >= 5 �� �褦�ˡ� ����� ��� �ͤ� �������� �礭�� �ʤޤ��� �������� ���Ȥ� ���� ����� �����ʤ� ���Ȥ� �Ǥ��ޤ��� ��Ӥ� �Ԥʤ� �黻�Ҥˤϡ�
> ���դ� ���դ�� �礭��
>= �礭���� ������
== ������
<= �������� ������
< ������
������ޤ��� ���������Ȥ� ɽ���Τˡ� ����� 2�� �Ťͤ� ���Ȥ� ���դ��� ����������

�׻��ˤ������

��Ӥ� �оݤˤϡ� �׻��� ��̤� �Ȥ� ���Ȥ� �Ǥ��ޤ��� emp.dat �� ��� �¶⤬ 50�ɥ�� �ۤ��� ���Ȱ��� ���֤ˤϡ�
$2 * $3 > 50
�Ȥ��� �ѥ������ �Ȥ��ޤ���

ʸ����Ȥˤ������

Grep �� �Ԥʤä� ���� �褦�ˡ� ����� ʸ����� �ޤ� ���ϹԤ� ���򤹤� ���Ȥ� �Ǥ��ޤ��� ���� �ץ������Ǥϡ� �ǽ�� �� �� Susie �� ����褦�� ���Ƥ� �Ԥ� ɽ�����ޤ���
$1 == "Susie"
�Ԥ� ��� �ɤ����� Susie �� ���� ʸ���� ����� ���򤹤� �Τ� ����С�
/Susie/
�Ȥ��� ������ �Ϥ�� �ѥ������ �Ѥ��� ���Ȥ� �Ǥ��ޤ��� �ޤ��� 2�Ű������ ������ �Ϥ�� ʸ����ˤϡ� grep �� �ؤ�� ���� ɽ�� (regular expression) �� �Ȥ� ���Ȥ� �Ǥ��ޤ���

�ѥ�������Ȥ߹�碌

���ä��� �֤��ġ� (&&) �֤ޤ��ϡ� (||) ������� (!) �� �Ȥäơ� �ѥ������ �Ȥ߹�碌�� ���Ȥ� �Ǥ��ޤ��� �㤨�С� ���� �ץ������� $2 �� 4�ʾ夫�� $3�� 20�ʾ�� �Ԥ� ɽ�����ޤ���
$2 >= 4 || $3 >= 20

BEGIN �� END

BEGIN �� �ǽ�� �ɤ߹��� �ե������ �ǽ�� �Ԥ� ���� Ŭ�礷�� END �� �Ǹ�� �ե������ �ǽ��Ԥ� ������ ����ä� ��� Ŭ�礷�ޤ��� ���� ��Ǥϡ� ���Ф��� ������ BEGIN�� ���Ѥ��� ���ޤ���
BEGIN { print "NAME\tRATE\tHOURS"; print " " }
{ print }
���ߥ������ ���ڤ뤳�Ȥǡ� ʣ���� ʸ�� �ҤȤĤ� ������������� �� ���Ȥ� �Ǥ��ޤ��� �ޤ� print " " �Ǥ� ���Ԥ� ɽ���� �����ʤä� ���ޤ���

����

�Ȥꤢ���������ԤΥ��ޥ�ɤǤǤ������ʤ�Τ��������ޤ��� �ե�����̾�����Ϥ�˺���ȡ�ɸ���������ɤ⤦�Ȥ��ޤ��� Csh �Υץ���ץȤ��ФƤ��ʤ��ʤ�ޤ��Τǡ�Control+D �� ɸ�����Ϥ�λ����������Control+C �ǥץ�������λ������ ����������
  1. emp.dat ���椫�� Mark �ε�����׻�����ɽ�����ʤ�����
  2. emp.dat ���椫�� 20���ְʾ�Ư�����ͤ�̾����ɽ�����ʤ�����
  3. ��ʬ�� �����֤Τ��Ť���Ģ �� acc.dat �Ȥ���̾���Ǻ������Ƥ���������
    acc.dat ���椫�鿩��ζ�ۤ���Ф���ɽ�����ʤ�����
  4. acc.dat ���椫�� other �����줿���ܤ�ɽ�����ʤ���(�㡢socks books etc)
  5. acc.dat ���椫�� lunch �򿩤٤�����ɽ�����ʤ�����
�ʾ�μ¹ԥ��ޥ�ɤ� acc.dat �����Ƥ�ô�������إ᡼����������ʤ�����