1. AWK 프로그래밍언어 AWK는자료처리중심의프로그래밍언어이며텍스트처리와보고서생성을목적으로만들어졌다. AWK라는명칭은이언어를처음설계한 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3명의이름을따서지은것이다. AWK는

Similar documents
Microsoft PowerPoint - chap06-1Array.ppt

Visual Basic 반복문

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

윈도우즈프로그래밍(1)

PHP & ASP

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - chap-03.pptx

금오공대 컴퓨터공학전공 강의자료

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PowerPoint Presentation

설계란 무엇인가?

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Infinity(∞) Strategy

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - Lesson2.pptx

설계란 무엇인가?

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

11장 포인터

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

02장.배열과 클래스

Microsoft Word - assn2_v9.docx

<C6F7C6AEB6F5B1B3C0E72E687770>

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

금오공대 컴퓨터공학전공 강의자료

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

컴파일러

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - C++ 5 .pptx

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

Microsoft PowerPoint - Chapter_02.pptx

쉽게 풀어쓴 C 프로그래밍

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

C# Programming Guide - Types

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-05.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

Microsoft Word - PLC제어응용-2차시.doc

슬라이드 1

PowerPoint 프레젠테이션

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

Microsoft PowerPoint Predicates and Quantifiers.ppt

59점은 이다. >> grade=hakjeom(59) 잘된다. 문제는 100 점이이상이면어떻게할것인지? 입력값이정확히범위안에들어온다는 가정에서프로그래밍할것인지입력값의범위등을사전에필터링할것인지의문제이다. (2) 두번째문제는 입력점수가숫자하나가아닌여러숫자의묶음 ( 벡터,

chap 5: Trees

C 프로그램의 기본

PowerPoint 프레젠테이션


목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

Microsoft PowerPoint - chap-06.pptx

17장 클래스와 메소드

PowerPoint Template

PowerPoint Presentation

슬라이드 1

PowerPoint Presentation

중간고사

Microsoft PowerPoint - Chapter_08.pptx

Java ...

쉽게 풀어쓴 C 프로그래밍

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint Presentation

Microsoft PowerPoint UNIX Shell.ppt

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

No Slide Title

ch15

PowerPoint 프레젠테이션

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint Template

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - 제11장 포인터(강의)

쉽게

KNK_C_05_Pointers_Arrays_structures_summary_v02

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

Microsoft PowerPoint - chap08-1 [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Microsoft PowerPoint - c2.ppt

Microsoft PowerPoint 자바스크립트(1).pptx

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

Microsoft PowerPoint 세션.ppt

Transcription:

1. AWK 프로그래밍언어 AWK는자료처리중심의프로그래밍언어이며텍스트처리와보고서생성을목적으로만들어졌다. AWK라는명칭은이언어를처음설계한 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3명의이름을따서지은것이다. AWK는 C 언어를기반으로만들어졌으며, C 언어의제어구조와예약어 (Keyword) 등을거의유사하게그대로사용하면서다양한자료처리기능을지원하고있다. (cygwin 패키지에는 GNU에서 AWK를개량한버전인 gawk가들어있다.) AWK는하나의파일이여러개의레코드로이루어져있고이레코드들은특정구분자로구분되어있으며 (default는줄바꿈문자임 ), 각레코드가여러개의필드로이루어져있고각필드가특정구분자 (default는공백또는탭 ) 로구분되어있는구조를처리하기에적합한프로그램이다. 이런구조를테이블 (table) 구조라고한다. 2. AWK 프로그램의구성 AWK 프로그램은규칙 (Rule) 의연쇄로정의할수있다. 규칙이란어떤특정조건에서어떤 행동을하라는것으로설명할수있다. AWK 에서는이러한규칙을 Pattern-Action 으로정 의한다. Pattern-Action 구조 AWK 프로그램의기본구조는아래와같이 pattern-action 의리스트로정의할수있는데, 정의된패턴을텍스트에서검색하게되는경우 AWK 프로그램은해당패턴에대한실행코 드를수행하게된다. pattern 1 { action 1 } pattern 2 { action 2 } pattern 3 { action 3 }...... pattern n { action n } AWK 프로그램의기본동작방식은다음과같이정의할수있다. ü 입력파일에서한행을읽어들인다. ü 각행마다프로그램에서지정된패턴에부합하는있는지검색한다. ü 만약패턴에일치하는부분이해당행에포함되어있다면, 지정된실행코드를수행한다. ü 그렇지않다면 ( 패턴에일치하는부분이없다면 ), 해당행에대해서아무런코드도실행하지않고다음입력행으로넘어간다. ü 위의과정을파일끝까지행단위로읽으면서반복한다.

별도로패턴이지정되지않은경우에는모든행에대해서 Action 코드를실행한다. [data.txt] data.txt 는예제로사용할자료로 6 명의수강생에대해실시한 5 번의시험성적표이다. 자 료에기술된데이터는아래와같다. NAME 1st 2nd 3rd 4th 5th pjh 23 22 24 20 25 ygd 25 24 23 22 24 cwh 21 19 20 22 18 hyunjo 20 21 22 18 19 ysh 18 19 17 20 22 yhj 21 20 19 21 18 첫번째행은각필드 ( 열 ) 의명칭이다. 첫번째필드는수강생의이름을약자로표시한것 이고, 두번째필드에서여섯번째필드까지는각시험의성적이다. 이예제파일은이장 에서사용할몇가지예제프로그램에서입력자료로사용할것이다. [sa_001.awk] sa_001.awk 는패턴이없이 Action 실행코드만있는 AWK 프로그램이다. 프로그램코드 는아래에제시되어있다. 패턴이정의되어있지않기때문에아래프로그램은입력자료의 모든행에대해서실행코드를수행한다. 1: # sa_001.awk 2: { 3: print $1, $2; 4: } [1행] 은주석 (Comment) 부분이다. 주석이란프로그램의이름, 작성일시, 작성자, 기능등프로그램을작성하면서기록해놓은설명부분을말한다. 주석을기록할때에는 # 기호를사용한다. # 기호를사용하면 # 이후에기록되는부분은모두주석으로처리되어서프로그램의실행에전혀영향을미치지않는다. 주석기호 # 는한행단위로적용되며, 여러줄의주석을기록해야하는경우에는각줄마다주석시작부분에 # 기호를적어줘야한다. [2행] 과 [4행] 의 {, } 기호는 Action 부분의시작과끝을지정할때사용하는기호이다. 그리고제어구조 (Control-Structure) 등에서프로그램블록 (block) 의시작과끝을나타내는기호로도사용한다. [3행] 은프로그램실행부분이다. print는 AWK에서기본적으로제공하는함수 (function) 이다.

print는표준출력장치 ( 여기서는화면 ) 로텍스트를출력해주는함수이다. $1, $2, $3 등은각열 ( 필드 ) 의값을담고있는내장변수 (built-in variables) 이다. $1은첫번째열의값을, $2는두번째열의값을, $3는세번째열의값을담고있다. < 그림 1> [sa_002.awk] 아래에제시된 sa_002.awk 프로그램은 pattern-action 구성으로이루어진프로그램이다. pattern 부분은 ( 기호와 ) 기호사이에정의하고, action 부분은 { 기호와 } 기호사 이에정의한다. 1: # sa_002.awk 2: (NR > 1) { 3: print $0; 4: } [2행] 에서 (NR > 1) 은패턴이다. NR은 Number of Record의약자로내장변수 (Built-in Variable) 이다. [2행] 에서는 NR이 1보다큰경우에만해당코드를수행하도록패턴을정의하고있다. [2행], [4행] 에서 { 와 } 는 action 부분의시작과끝이다. [3행] 에서 print $0는한동작을수행하도록지시하는문장이다. 이러한문장의끝에는 ';' 기호를반드시사용한다. print는내용을화면으로출력하라는함수이고, $0는

해당입력행전체를담고있는내장변수이다. < 그림 2> 3. 변수와상수 변수 (variable) 란어떤특정한값을저장하기위해사용하는명칭이다. AWK 프로그래밍에서는 AWK 언어를정의하는예약어 (Keyword) 와연산자, 내장변수 (Built-in Variables) 와이름이겹치지않는다면자유롭게변수의이름을정할수있다. 상수 (constant) 는수치값, 문자열과같은고정적인값을말한다. 문자열상수를사용할때에는문자열을따옴표로둘러싸서사용한다. 1: # sa_003.awk 2: { 3: strhead = "[LINE(S)] >> "; 4: print strhead, $0; 5: } [3행] 에서따옴표로둘러싼 "[LINE(S) >> " 는문자열상수이다. 문자열상수를 strhead라는변수에할당하는것이다. strhead는값을저장하는변수이다. strhead를출력하거나하면 strhead에저장된 값인 "[LINE(S)] >> " 라는값이출력될것이다.

< 그림 3> 4. 예약어 (Keywords) 와내장변수 (Built-in Variables) 프로그램에서변수를사용할때에 AWK 언어에서미리정의해놓았기때문에사용할수없는어휘들이있다. 어느프로그래밍언어나예약어 (Keywords) 라는것이있다. 예약어는프로그래밍언어의구조를정의하기위해사용하는어휘목록이다. 내장변수는변수중에서사용자의편의를위해 AWK 언어에기본적으로정의되어있는변수를말한다. 이외에도내장함수 (Built-In Function) 가있다. 예약어, 내장변수, 내장함수등의명칭은변수이름으로사용할수없다. 예약어 (Keywords) 프로그램언어에서프로그램의흐름을제어하기위해서미리정의되어있는어휘의목록을에약어 (Keyword) 라고한다. AWK 언어에도다른프로그램언어처럼예약어가정의되어있으며대표적인것으로 if, else, do, while, for, next, in 등의어휘는미리흐름을제어하기위해서정의되어있기때문에변수로사용할수없다. 내장변수 (Built-In Variables) 내장변수는특정한목적에사용하기위해서미리프로그램언어에서정의해놓은변수를말한다. 변수이기때문에내장변수에할당되어있는값을프로그램안에서변경할수도있다. 대표적인내장변수몇가지만알아보도록하자. FS FS (Field Separator) 는입력파일에서필드사이를구분해주는구분자를할당하는변수이다. 만약입력파일자료에서필드구분자 (delimiter) 를 # 문자로지정하고싶다면 FS에 "#" 를, ## 문자열로지정하고싶다면 FS에 "##" 를할당하면된다.

OFS OFS (Output Field Separator) 는자료를출력할때출력하는자료에서필드간의구분자를저장하고있는내장변수이다. NF NF (Number of Field) 는입력자료에서각행에 FS로구분되는필드가몇개가있는지, 즉각행을읽어들일때마다각행의필드수를저장하고있는내장변수이다. NR NR (Number of Record) 는현재까지읽어들인행의수를저장하고있는변수이다. $1, $2, $3,... $1, $2, $3와같이 $ 기호에숫자를적어주면현재입력행에서받아들인입력필드를저정하고있다. $1은첫번째필드를, $2는두번째필드를, $3는세번째필드를저장하고있는내장변수이다. 필드의수가 n인경우에는 $n에 n번째필드의값이저장되어있다. $0 $0은입력행전체를저장하고있는내장변수이다. 내장변수는아니지만 AWK에내장되어있는패턴으로 BEGIN과 END가있다. BEGIN은패턴으로서 AWK 프로그램이입력자료를읽어들이기전에수행해야할실행코드를정의할때사용하고 END 패턴은모든행을읽어서처리하고난뒤실행되는코드를정의하기위해사용한다. 5. 연산 프로그램에서기본적인연산은할당 (assignment), 비교 (comparison), 사칙연산이다. 할당은어떤변수에다른변수의값, 또는상수값을저장하는것이고, 비교는수치또는문자열값의크고작음을비교하는연산이다. 사칙연산은덧셈, 뺄셈, 나눗셈, 곱셈및나머지연산을말한다. 각각의연산 (Operation) 에는연산자 (Operator) 가정의되어있다. 연산자 설 명 = 대입, 할당연산자 <, > 비교연산자 <=, >= 비교연산자 +, -, *, / 사칙연산 % 나머지연산 대입, 할당연산자대입, 할당연산자는값을할당하는연산자이다. 예는다음과같다. a = 103; # 변수 a에수치값 103을저장한다. a = "hello"; # 변수 a에문자열 "hello" 를저장한다.

비교연산자 a > b # a의값이 b보다크면참, 그렇지않으면거짓이라는연산결과가나온다. a >= b # a의값이 b보다크거나같으면참, 그렇지않으면거짓이라는연산결과가나온다. 사칙연산자 a = b +c; # 덧셈, 뺄셈, 곱셈, 나눗셈 4 가지연산의연산자가있다. 나머지연산자 a = 5 % 3; # 사칙연산이외에나머지연산이있다. 나눗셈연산이나눗셈의몫을결과로반환하는반면나머지연산은나눗셈의나머지를값으로반환한다. # 5 % 3은 5를 3으로나눈나머지인 2를값으로반환한다. 6. 배열 변수에는한번에한가지값밖에저장할수없다. 만약어떤변수에서로관련되어있는 10가지의값을저장하려면배열을사용해야한다. 배열에저장되는각각의값을원소라고한다. arr[0] = "a"; arr[1] = "b"; arr[2] = "c"; print arr[0]; print arr[1]; # arr[0] 은배열변수 arr의첫번째원소를가리키고, arr[0] = "a" 는첫번째원소에 "a" 라는값을저장하라는뜻이다. # print arr[0] 은배열변수 arr의첫번째원소인 arr[0] 의값을출력하라는것이다. 7. 제어구조 제어 (Control-Flow) 구조는프로그램의흐름을제어한다는뜻이다. 프로그램의흐름을제어한다는것은프로그램이조건에따라서다른방식으로동작하도록하는것이다. 프로그램의흐름을제어하는방식은조건에의한제어 ( 조건문 ) 아반복에의한제어 ( 반복문 ) 두가지로크게구분할수있다. 조건문 (Conditional-Statement)

AWK 에서조건에의한제어방식은대표적으로 if-else 문장이있다. if-else 문장의기본 구조는다음과같다. if (truth_condition) { } else if (truth_condition) { } else { } if 문에서는주어진조건에따라서조건이만족하는경우해당코드를수행하고그렇지않 으면다음조건을검사한다. 아래 sa_004.awk 프로그램 [3 행 ] 에서 $3 가 21 보다크면 [4 행 ]-[6 행 ] 까지의코드를수행하게된다. 1: # sa_004.awk 2: (NR > 1) { 3: if ($3 > 21) 4: { 5: print $0; 6: } 7: } < 그림 4> 반복문 반복문은주어진조건이참인동안해당코드를반복적으로수행하도록한다. 반복문에는

while- 문과 for- 문이있다. while (truth_condition ) { } 위에서 while 안의조건이참인동안 while- 문안의프로그램코드를실행하게된다. for- 문의기본구조는다음과같다. for (initial_exp ; test_exp; change_exp ) { } initial_exp 은반복문을제어하는변수이고, test_exp 은반복문을언제중지시킬지결정하는 기준이된다. change_exp 은반복문을제어하는변수를변화시키는방식이다. 1: # sa_005.awk 2: { 3: i = 0; 4: 5: while (i <NF) 6: { 7: i++; 8: print $i; 9: } 10: } 1: # sa_006.awk 2: { 3: 4: for (i = 1; i <= NF; i++) 5: { 6: print $i; 7: } 8: } 위프로그램은 for- 문과 while- 문을이용해서동일한동작을하는프로그램을서로다른반복문으로구성한것이다. while- 문을이용한예를설명하면, [3 행 ] 에서반복문을제어하는변수인 i 를 0 으로초기화한다. 그리고 [5 행 ] 에서 i 가 NF, 즉각행의필드의수보다작

은동안 [6 행 ]-[9 행 ] 까지의코드를실행한다. < 그림 5> 8. AWK 에서의정규표현 앞서공부한바있는정규표현을 AWK에서도이용할수있다. AWK에서정규표현을이용하기위해서는정규표현을 '/' 문자사이에정의하면된다. 우리가예제로사용하는 data.txt 에서각행에 y로시작하고 h로끝나는문자열이있는경우화면에출력하도록하는프로그램을만들어보도록하자. 1: # sa_007.awk 2: { 3: if ($0 ~ /y.+h/) { 4: print $0; 5: } 6: } 위프로그램은각행에서 y로시작하고 h로끝나는문자열이있는경우에만해당행을화면에출력하는프로그램이다. [3행] 에서정규표현을사용해서이러한패턴을정의했다. 정규표현을입력문자열과대조시켜서문자열이있는지검색하기위해서는 ~ 을사용한다. ~ 는 AWK에서정규표현검색을사용하기위한연산자이다. < 그림 6>

AWK 관련자료 AWK에대한자세한사용자설명서는 GNU 홈페이지의 AWK 매뉴얼 (GAWK: Effective AWK Programming - A User's Guide for GNU AWK) 을추천한다. 이책을쓸당시 gawk 최신버전은 3.1.1이었다. 이버전에대한매뉴얼은 http://www.gnu.org/manual/gawk-3.1.1/gawk.html에서볼수있다.