함수 안에 함수가 정의되어 있는 경우 "중첩 영역(Nested Scopes)이 발생한다.

이 경우, 가장 안쪽의 영역부터 바깥쪽의 영역 쪽으로 변수명을 탐색하며, 먼저 발견되는 변수의 값을 취한다.


init[0]은 변수를 새로 생성하는 것이 아니고 참조하는 것이므로...



'Programming > Python' 카테고리의 다른 글

가변 인수  (0) 2013.04.28
키워드 인수  (0) 2013.04.27
[File I/O] 지속 모듈  (0) 2013.04.14
표준 입/출력 방향 전환  (0) 2013.04.13
파일 입/출력 예제  (0) 2013.03.12
Posted by scii
:

books

Book 2013. 4. 23. 01:44 |


SIMD 병렬 프로그래밍
국내도서>컴퓨터/인터넷
저자 : 정영훈
출판 : 프리렉(이한디지털리) 2012.02.01
상세보기



헬로! 컴퓨터 프로그래밍
국내도서>컴퓨터/인터넷
저자 : 워렌 산데 (Warren Sande),카터 산데(Carter Sande) / 김승범,박준표역
출판 : 위키북스 2011.04.20
상세보기



C로 배우는 알고리즘 1
국내도서>컴퓨터/인터넷
저자 : 이재규
출판 : 세화 2010.02.20
상세보기

C로 배우는 알고리즘 2
국내도서>컴퓨터/인터넷
저자 : 이재규
출판 : 세화 2013.01.01
상세보기

고전이지만 정평이 나있는 책



C++ 프로그래밍언어 (특별판)
국내도서>컴퓨터/인터넷
저자 : 비야네 스트롭스트룹
출판 : 피어슨에듀케이션코리아 2007.09.10
상세보기

C++ 창시자가 직접 쓴 책



뇌를 자극하는 C++ STL
국내도서>컴퓨터/인터넷
저자 : 공동환
출판 : 한빛미디어 2012.04.02
상세보기

The C++ Standard Library (Hardcover / 2nd Ed.)
외국도서
저자 : Nicolai M. Josuttis
출판 : Addison-Wesley Professional 2012.04.09
상세보기



Effective C++ : 55 Specific Ways to Improve Your Programs and Designs (3rd Edition/ Paperback)
외국도서
저자 : Scott Meyers
출판 : Addison-Wesley 2005.05.12
상세보기

More Effective C++ (Paperback)
외국도서
저자 : Scott Meyers
출판 : Addison-Wesley 1995.12.25
상세보기

Effective STL - 50 Specific Ways to Improve Your Use of the Standard Template Library (Paperback)
외국도서
저자 : Scott Meyers
출판 : Addison-Wesley 2001.06.06
상세보기

C++ 을 한다면, 꼭 읽어야 하는 필수 도서라고한다. STL 공부하고 Effective 공부해야지!!




손에 잡히는 정규 표현식
국내도서>컴퓨터/인터넷
저자 : 벤 포터(Ben Forta) / 김경수역
출판 : 인사이트 2009.07.31
상세보기

한 권으로 끝내는 정규표현식
국내도서>컴퓨터/인터넷
저자 : 잰 고이바에르츠,스티븐 리바이선 / 김지원역
출판 : 한빛미디어 2010.09.30
상세보기



The RenderMan Shading Language Guide (Paperback)
외국도서
저자 : Cortes, Rudy/ Raghavachary, Saty
출판 : Course Technology Ptr 2007.03.28
상세보기

Essential RenderMan (Paperback/ 2nd Ed.)
외국도서
저자 : Stephenson, Ian
출판 : Springer-Verlag New York Inc 2007.01.30
상세보기




게임 프로그래머를 위한 자료구조와 알고리즘 (CD:1)
국내도서
저자 : RON PENTON / 류광역
출판 : 정보문화사 2004.01.05
상세보기




Qt 4를 이용한 C++ GU 프로그래밍
국내도서
저자 : 자스민 블랑쉐(Jasmin Blanchette),마크 서머필드(Mark Summerfield) / 조성만역
출판 : 아이티씨(ITC) 2009.03.20
상세보기


Qt 실전 프로그래밍
국내도서
저자 : 김대진
출판 : 성안당 2010.04.19
상세보기



Python


The Python Standard Library by Example 한국어판
국내도서
저자 : 더그 헬먼(Doug Hellmann) / 정승원역
출판 : 에이콘출판사 2012.06.07
상세보기




프로 Git
국내도서
저자 : 스캇 샤콘(Scott Chacon) / 박창우,이성환,최용재역
출판 : 인사이트 2013.04.10
상세보기




'Book' 카테고리의 다른 글

리눅스 쉘 스크립트 프로그래밍  (0) 2013.04.23
열혈강의 파이썬  (0) 2013.02.14
손에 잡히는 VIM  (0) 2013.02.06
Posted by scii
:


리눅스 쉘 스크립트 프로그래밍 입문
국내도서
저자 : 김태용
출판 : 제이펍 2009.09.30
상세보기


회사 업무로 인하여 bash쉘을 사용할 필요가 있었다. 


그런데, 예전부터 쉘 스크립트를 공부할 예정이었다. 그래서 서점에가서 이 책을 바로 구매하였다.

3일만에 이 책을 모두 보았다. 예전부터 리눅스를 써왔고... 공부한 경험 덕분이다.


급히 bash쉘을 적용해야 하기때문에 속도를 내서 읽었다. 그런데, 이 책... 너무 좋았다. 이 책으로 인하여 bash쉘의 대부분을.. 실무에서 바로 적용을 하였다. 

정말 고마운 책이다. 


역시... 공부는 책을 보며 하는게 정답인 것 같다. 

그리고 이 책에서 나오는 awk 프로그래밍은 너무나 강력해서 많이 쓰일 듯하다. 지금도 쓰고 있고... 



'Book' 카테고리의 다른 글

books  (0) 2013.04.23
열혈강의 파이썬  (0) 2013.02.14
손에 잡히는 VIM  (0) 2013.02.06
Posted by scii
:

match 연산자

Linux/awk 2013. 4. 21. 12:30 |


match 연산자

틸드 (~) 로 표기되는 match 연산자는 하나의 레코드 또는 필드 안에서 표현식과 매칭되는 것이 있는지 검사하는 연산자이다.



1) 위의 첫번째는 2번 필드에 대문자 Kil 또는 kil 과 매칭되는 것이 있는지 검색하고 검색된 결과가 있다면, 검색된 라인을 출력한다.

2) 두번째는 2번 필드가 g로 끝나지 않는 라인을 검색하고 출력한다.



POSIX 문자 클래스

POSIX 문자

 [:alnum:]

 [A-Za-z0-9] 알파벳 문자와 숫자로 이루어진 문자열

 [:alpha:]

[A-Za-z] 알파벳 문자 

 [:blank:]

[ /x09] 스페이스와 탭 

 [:digit:]

[0-9] 숫자 

 [:graph:]

[!-~] 공백이 아닌 문자 (스페이스, 제어 문자들을 제외한 문자) 

 [:lower:]

[a-z] 소문자 

 [:print:]

[-~] [:graph:] 와 유사하지만 스페이스 문자를 포함 

 [:punct:]

[!-/:-@[-{-~] 문장 부호 문자 

 [:space:]

[ \t\v\f] 모든 공백 문자(newline 줄바꿈, 스페이스, 탭) 

 [:cntrl:]

컨트롤 제어 문자 

 [:upper:]

[A-Z] 대문자 

 [:xdigit:]

[0-9a-fA-F] 16진수에서 사용할 수 있는 숫자 


awk '/[[:lower:]]+g[[:space:]]+[[:digit:]]/' awkfile2

-> 위의 명령은 하나 이상의 소문자를 검색한 다음, g가 나오고 다음으로 하나 이상의 공백이 나오고, 이어서 숫자가 나오는 라인을 검색하는 명령이다.


'Linux > awk' 카테고리의 다른 글

필드 분리자, 액션, 정규표현식, 메타문자  (0) 2013.04.21
awk 동작원리, print, printf, OFMT 변수  (0) 2013.04.21
awk programming  (0) 2013.04.21
Posted by scii
:


필드 분리자 (Field Separator)

입력 필드 분리자 (FS)

awk의 빌트인 변수 FS는 입력 필드 분리자의 값을 가지고 있다. 

FS의 디폴트 값으로 공백과 탭이 사용되고 이 값으로 입력 필드가 분리된다. 

FS의 값은 BEGIN 문장 또는 명령라인에서 새로운 값으로 변경될 수 있다. 

명령라인에서 FS 값을 변경하기 위해서는 -F 옵션을 사용해야 한다. 이때 -F 다음에 적어주는 문자가 새로운 필드 분리자가 된다.


필드 분리자를 여러 개 지정할 수도 있다.

-F 옵션은 브라켓([ ]) 안에서 정규표현식을 사용할 수 있는데, 아래의 예제에서 공백이나, 콜론(:), 탭을 만나면 이 문자를 필드 분리자로 인식한다. 

작은 따옴표는 쉘의 메타문자로 인식하지 않도록 하기 위함이다.





액션

pattern {action statment; action statment; etc.}

or

pattern

{

action statement

action statement

}


awk에서 액션은 컬리 블레이스로 둘러싸인 문장이며 세미콜론(:)으로 구분된다.

패턴은 애션 앞에 오며, 액션은 간단한 문장 또는 복잡한 문장들의 그룹으로 만둘 수 있다. 

문장들은 세미콜론 또는 newline에 의해 분리된다.

{print $1, $2}

 패턴은 첫 번째 열기 컬리 브레이스 ({) 부터 첫 번째 닫기 컬리 브레이스(}) 까지의 액션을 관리한다.

만약 패턴 뒤에 액션이 올 때, 첫 번째 열기 컬리 브레이스는 패턴과 같은 라인에 있어야 한다.

문자열 매칭 패턴은 슬래시(/) 로 둘러싸인 정규표현식을 포함한다.



awk와 정규표현식

awk에서 정규표현식은 슬래시(/)로 둘러싸인 문자들로 구성된 패턴이다. 

awk는 정규표현식을 수정할 수 있는 정규표현식 메티문자(egrep와 같음) 사용을 지원한다.



아래의 awk 명령은 대문자로 시작하고, 두 번째 문자부터 소문자를 하나 이상 포함하고 있으며, 그 뒤로 공백이 있는 라인을 출력하라는 의미이다.


awk에서 지원하는 메타문자


 awk 메타문자

의미 

문자열의 시작과 매칭 

문자열의 끝과 매칭 

문자 한 개와 매칭 

문자가 없거나 그 이상과 매칭 

하나의 문자 또는 그 이상과 매칭 

문자가 없거나 하나와 매칭 

[ABC] 

A, B, C 문자셋 중 하나의 문자만 매칭 

[^ABC] 

A, B, C 문자셋 중 매칭되는 문자가 하나도 없음 

[A-Z] 

A에서 Z까지의 범위에서 매칭되는 문자가 있음 

A|B 

A 또는 B 문자 매칭 

(AB)+

AB 문자셋이 하나 이상 매칭. 예) AB, ABAB, ABABAB 

검색 문자열에서 검색된 문자열로 대체할 때 사용 



awk에서 지원하지 않는 메타문자    

 메타문자

의미 

\< >/ 

단어 

\( \) 

후위 참조 

\{ \} 

반복 



'Linux > awk' 카테고리의 다른 글

match 연산자  (0) 2013.04.21
awk 동작원리, print, printf, OFMT 변수  (0) 2013.04.21
awk programming  (0) 2013.04.21
Posted by scii
:


awk -f 옵션

awk -f [awk 명령파일] [awk 명령을 적용할 텍스트 파일]


awk 액션과 명령이 파일에 작성되어 있다면 -f 옵션을 사용한다. 

awk 명령을 특정한 파일에 저장해두고, 이 파일에 입력된 명령을 사용하여 다른 파일을 처리하고자 할 때 사용하는 것이 -f 옵션이다.





레코드와 필드

레코드

awk 는 입력 데이터를 볼 수 없다. 하지만, 포맷 또는 구조는 볼 수 있다. 기본적으로 레코드라고 불리는 각 라인은 newline으로 분리된다.


레코드 분리자

디폴트로 출력과 입력 레코드 분리자(라인 분리자)는 빌트인 awk 변수 ORS와 RS에 저장되는 캐리지 리턴이다.

ORS와 RS 값은 변경할 수 있지만 변경하지 않는 게 좋다.


$0 변수

모든 레코드는 awk에서 $0으로 참조된다. ($0는 수정될 수 있다. $0가 치환과 할당에 의해 수정되었을 때 NF의 값이고 필드의 번호이다.)

변수 $0는 현재의 모든 레코드를 그대로 저장한다. 그리고 이 내용을 화면에 출력한다.

awk는 디폴트로 print 액션만 사용해도 모든 레코드를 출력해준다.

awk '{print}' awkfile


NR 변수

각 레코드들의 번호는 awk의 빌트인 변수 NR에 저장된다. 레코드가 저장된 다음 NR의 값은 하나씩 증가하게 된다.

awk '{print NR, $0}' awkfile



필드 (Field)

각 레코드는 디폴트로 공백이나 탭으로 분리된 필드라는 워드로 구성된다. 각 워드들은 하나의 필드라고 부른다.

awk는 빌트인 변수인 NF에 필드의 수를 유지한다. (Number Field)

NF의 값은 일반적으로 라인당 100개의 필드를 가질 수 있다.



Posted by scii
:


awk 동작 원리



1) 먼저 awk는 파일 또는 파이프를 통해 입력 라인을 얻어와서 $0 이라는 내부 변수에 라인을 입력해 둔다. 각 라인은 레코드라고 부르는데, 기본적으로 newline에 의해 구분된다.

2) 다음으로 라인은 공백을 기준으로 각각의 필드나 단어로 나누어진다. 각 필드는 번호가 매겨진 변수로 저장되고 $1 부터 시작한다. 많게는 100개 이상의 필드를 저장할 수 도 있다. 

3) awk가 어떻게 공백을 사용하여 필드를 나눌까? 내장 변수인 FS라고 부르는 필드 분리자가 있는데, 이 FS는 가장 먼저 공백(탭)을 할당받는다. 만약 필드가 콜론(:) 이나 대시(-) 와 같은 다른 문자에 의해 분리된다면 새로운 필드 분리자로 FS의 값을 변경할 수 있다.

4) awk는 화면에 필드를 출력할 때 print 함수를 사용한다.

위의 결과값으로 CentOS와 100사이에 공백이 들어가 있음을 확인할 수 있다. 왜냐하면 명령에서 콤마(.)가 들어가 있기 때문이다. 콤마는 출력필드 분리자(OFS) 라는 내장 변수와 매핑되어 있다. 이 OFS는 기본값으로 공백을 할당받는다. 그래서 콤마는 OFS 변수에 할당된 공백 문자를 만들게 되는 것이다.

5) awk가 화면에 출력을 하고 나면 파일의 다음 라인이 호출되고 $0으로 저장된다. 이때 앞에서 변수 $0에 저장되었던 라인은 덮어쓰기가 된다. 또 다시 공백을 기준으로 필드가 분리되고 처리가 진행된다. 이와 같은 프로세스는 파일의 모든 라인이 처리되기 전까지 계속 반복된다.



print 함수

awk 명령의 액션 파트는 중괄호({})로 묶어준다. 만약 액션이 지정되지 않고 패턴이 매칭된다면 awk는 매칭된 라인을 모니터에 출력하는 기본 액션을 수행한다.

print함수는 포매팅이 필요없이 간단히 출력하는데 사용된다. 좀더 복잡한 포매팅을 원한다면 printf, fprintf, sprintf 함수를 사용하도록 한다. 


print 함수는 {print} 형식으로 awk의 액션 부분에 사용될 수 있다. 

print 함수는 아규먼트로 변수와 계산된 값 또는 문자열 상수를 받는다. 문자열은 큰 따옴표("")로 둘어싸야 한다. 

콤마(,)는 아규먼트들을 분리하는데 사용된다. 만약 콤마를 사용하지 않으면 아규먼뜰은 서로 연결되어버린다. 콤마는 기본값으로 공백을 가지는 OFS의 값을 검사한다.


print 함수의 이스케이프 문자

\b        백스페이스   

\f        폼피드

\n        newline 

\r        캐리지 리턴

\t        탭

\047        8진수 47

\c        c는 문자를 대표한다.



OFMT 변수

숫자를 출력할 때 숫자의 포맷을 제어해야 할 경우가 있다. 간단히 printf 함수를 사용하면 되지만, OFMT(Output Format) 변수를 사용할 수도 있다. 

OFMT 변수는 print 함수를 사용할 때 숫자의 출력 포맷을 제어할 수 있다. 기본 포맷으로 %.6g 가 설정된다. 이 포맷은 최대 전체 6자리를 가지는데, "0." 으로 시작하면 소수점 아래 6자리를 출력하고, "0."이 아닌 수로 시작하면 전체 6자리를 출력한다. 그리고 소수점 아래에 위치하는 마지막 6번째 수는 7번째 자릿수에서 반올림한다. 만약 대상의 수가 6자리를 넘지 않으면 그대로 출력한다.





printf 함수

출력할 때 필드 사이에 공백들을 지정하고 싶을 경우가 있다. 탭키를 사용한 print 함수는 깔끔한 출력을 보장하지 못한다. 하지만,

printf 함수는 포매팅된 깔끔한 출력을 제공한다. 

printf 함수는 C언어의 printf 문장처럼 표준 출력으로 포매팅된 문자열을 리턴한다. printf 문장은 포맷 지시자와 변경자 등의 제어 문자열을 가지고 있다. 제어 문자열은 콤마와 콤마로 분리된 표현식의 목록을 따른다.


'Linux > awk' 카테고리의 다른 글

match 연산자  (0) 2013.04.21
필드 분리자, 액션, 정규표현식, 메타문자  (0) 2013.04.21
awk programming  (0) 2013.04.21
Posted by scii
:

awk programming

Linux/awk 2013. 4. 21. 12:01 |


awk

Bash Shell 에서 필수적인 툴이다.


awk는 데이터를 조작하고 리포트를 생성하기 위해 사용하는 언어이다. 리눅스에서 사용하는 awk는 GNU 버전의 gawk 로 심볼릭 링크되어 있다.


awk에서는 간단한 연산자를 명령라인에서 사용할 수 있으며, 큰 프로그램을 위하여 사용될 수 있다. 

awk는 데이터를 조작할 수 있기 때문에 쉘 스크립트에서 사용되는 필수 툴이며, 작은 데이터베이스를 관하기 위해서도 필수이다.


※ awk 명령에서 END 블록을 사용할 경우에는 반드시 아규먼트 파일명을 적어주어야 한다. BEGIN 블록만 사용할 경우에는 아규먼트 파일명을 적지 않아도 동작한다.



awk Programming 

awk 프로그래밍은 awk 명령어를 입력한 다음, 작은 따옴표로 둘러싸인 패턴이나 액션을 입력하고 마지막으로 입력 파일을 입력한다. 만약 입력 파일을 지정하지 않으면 키보드 입력에 의한 표준 입력(stdin)으로부터 입력을 받게 된다. 

그리고 awk는 입력된 라인들의 데이터들을 공백 또는 탭을 기주능로 분리하여 $1부터 시작하는 각각의 필드 변수로 분리하여 인식한다.


파일로부터의 입력

awk 'pattern' filename

awk '{action}' filename

awk 'pattern {action}' filename






명령어로부터의 입력

명령어로부터 입력으 받기 위해서 '|' 파이프를 사용할 수 있다.

command | awk 'pattern'

command | awk '{action}'

command | awk 'pattern {action}'



df 명령어는 하드 디스크 용량 상황을 볼 수 있는 명령인데, df 명령의 결과를 보면 네 번째 필드에 사용할 수 있는 용량이 1kbyte block 단위로 표시된다. 네 번째 필드의 값이 10000000 보다 큰 라인을 출력하기 위해 df | awk '$4 > 10000000' 명령을 실행했기 때문에 위와 같이 결과가 출력된다. 

이와 같이 분리자를 지정하지 않은 경우에는 기본 분리자로 공백을 사용한다.


'Linux > awk' 카테고리의 다른 글

match 연산자  (0) 2013.04.21
필드 분리자, 액션, 정규표현식, 메타문자  (0) 2013.04.21
awk 동작원리, print, printf, OFMT 변수  (0) 2013.04.21
Posted by scii
: