전에는 awk로 표준출력을 가지고 놀았었죠...

이번엔 바로 파일로 가자구요.^^

흠..awk를 테스트 하는 프로그램을 만들어 보아요..

우선 아래 코드를 보시고 시작을 할까요?

File 1. 22 (DATA FILE)

길이|1|290
태호|0|100
성철|0|50


File 2. awktest

awk -F '|' '
    BEGIN{
                print "==============================";
                print "이름  |  바보여부 |  IQ";
            }
            {
                if ($2 == "1")
                {
                    BaboYn="Y";
                }
                else
                {
                    BaboYn="N";
                }

                print $1 "  |     " BaboYn "     |  " $3;

            }
    END  {
                print "==============================";
            }' 22


# Output
==============================
이름  |  바보여부 |  IQ
길이  |     Y     |  290
태호  |     N     |  100
성철  |     N     |  50
==============================


위처럼 저는 awk를 이용해서 22파일을 읽어서 제어하는 프로그램을 만들어 보았습니다.

awk에서 -F 가 구분자라는것은 전에 말씀 드렸죠?..^^

그리고 BEGIN은 파일을 열기전에 실행할 코드 입니다.

단순히 헤더를 만든다던가 할때 쓰면 좋겠죠..

아니면 연산을 할때 써도 좋구요..

좀 코드를 깔끔하게 하고자 하신다면..

사용하실 변수를 BEGIN에서 선언해도 좋습니다.^^


그리고 아무것도 없이 {}로 되어 있는 녀석들 있죠?

이녀석들이 파일을 한줄씩 읽어서 안의 코드를 실행 시켜주는 역할을 합니다.

파일이 1000000줄이라면 1000000번 실행 되겟죠??..^^

우선 $2 는 구분자 기준으로 두번째에 있는 녀석이고요..

이 녀석 값이 1 이면 BaboYn이라는 변수에 "Y"를 넣어줍니다..
아니면 BaboYn변수에는 "N"을 넣어 주고요..

그다음에는 print를 통해서 출력을 합니다..

이렇게 데이터 파일의 라인수 만큼 로직을 실행한뒤에 END 문을 탑니다..

END문은 프로그램이 종료하기전 한번만 타는 것이죠

저는 END에서 그냥 "==="를 출력 해 주었습니다.

모...Sum이 필요하다면 END부분에서 SUM한 값을 출력해줄 수도 있겠죠..

으흐흐...아주 쉽죠?

날로 먹는것 같다고요?;;

죄송합니다...삐질;;;

다음 이시간이 또 있을겁니다..

무언가 준비하겠죠.^^

으흐흐..부족한것 있으면 댓글이나 트랙백 주시면 감사하겠습니다.

댓글은 항상 열려 있으니..

부족하거나 요청 하실것이 있으면 말씀 주세요.^^..

awk를 한번은 써야지 생각 했는데..

생각해 보니 분량이 너무 많다..ㄱ-;;

그래서 간단히 쓰는것 부터...

하나씩 하나씩 포스팅 해 보고자 한다.^^

그냥 awk의 단순한 기능을 한번 보여주고자 한다..

이것만 알아도...단순한 awk처리는 가능할 것 같다.^^

awk로 구분자로 되어 있는 데이터를 읽어 오는 것을 한번 만들어 보았다..

우선 아래와 같은 DATA 파일이 있다고 가정 하자..!!

File 1. 11

1|2|3|4
5|6|7|8
9|10|11|12

파일 몬양이 왜 이따구냐고 따지지 말자!!

내 맘이다.ㅎㅎ

여기서 | 를 구분자로 2번째 있는 데이터 만 뽑고 싶다..

그렇다면..

쉘에서 단순히

[ellin@Coji] cat 11 | awk -F '|' '{print $2}'

라고 쳐보자..

오!! 두번째 인자만 뽑을 수 있다...신기하군..= 0 =

그럼 두번째 세번째를 뽑는데 그 사이에 "|"를 넣어 볼까?

[ellin@Coji] cat 11 | awk -F '|' '{print $2"|"$3}'

오호....신기하군...

파일로 받고 싶다고?

[ellin@Coji] cat 11 | awk -F '|' '{print $2"|"$3}' > 22

오호...쉽고 간단하군.ㅋㅋ

하지만 이것은 awk의 아주 단순한 처리이다..

더 복잡하고 어려운것도 많다..ㅋㅋ

#2 에서는 조금더 신기한 기능을 가지고 설명 하도록 하겠다...

'컴퓨터 이야기' 카테고리의 다른 글

윈도우 비스타 출시와 Active X  (8) 2007.02.14
UNIX 아주 간단한 awk #2  (0) 2007.02.14
UNIX 아주 간단한 awk #1  (0) 2007.02.12
UNIX 에서 "expect"라는 신기한 녀석!!  (0) 2007.02.10
Unix 라인에디터  (0) 2007.02.09
find를 이용한 스크립트.  (0) 2007.02.08

+ Recent posts

티스토리 툴바