일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 대항해시대
- LiveCD(USB)
- webhard
- UNIX
- SSH
- portable
- MS windows
- Disk Partition
- MS Windows PE
- explorer
- apm
- network
- Crack(Serial Key)
- game
- Network Info(Tool)
- Windows 10
- Update
- H/W
- Programming
- calculator
- OS(operating system)
- FTP
- Linux
- script
- program
- PC
- Command
- Backup(Restore)
- javascript
- web
- Today
- Total
<In Story>
Shell Script - awk 명령을 이용한 필드 단위 패턴 처리 // [Unix] [Linux] [Script] [Programming] [Command] 본문
Shell Script - awk 명령을 이용한 필드 단위 패턴 처리 // [Unix] [Linux] [Script] [Programming] [Command]
<In Story, Hi story, History> 2015. 6. 19. 20:24http://ra2kstar.tistory.com/153
awk
awk 는 필드 단위로 패턴을 검색하고, 조작하는 것을 주 목적으로 한다. 파일 내의 각 라인 (레코드)에 대한 필드 를 인식할 수 있는 패턴 검색 기능을 보유하고 있으며, 이를 이용해서 조작도 가능하다.
awk [-f 프로그램파일] [-F 필드구분자] ["패턴{액션}"] [처리할 파일명]
옵션
-f 프로그램 파일
awk 유틸리티의 실행 액션이 저장된 프로그램 파일을 지정
-F 필드 구분자
필드 구분자를 지정
"패턴{액션}"
패턴이 일치하면 액션이 실행된다.
사용예
$> awk -F : "{print $1, $6}" ./text.txt
= text.txt 파일에서 ":" 구부자를 이용하여 1번째와 6번째 필드를 프린트
패턴과 액션의 구조
awk의 옵션 중의 하나였던 ["패턴{액션}"] 에서도 여러가지 구조가 존재한다. 가장 대표적인 3가지를 알아보자
1. BEGIN
- 첫번째 레코드를 읽기 전에 지정된 액션을 실행
2. END
- 마지막 레코드를 읽고 난 후, 지정된 액션을 실행
3. PATTERN
- 입력되는 각 라인(레코드)별로 실행되며, 만약 그 라인이 패턴과 일치할 경우 액션이 실행된다.
- 정규표현식의 경우 "/정규식/" 으로 나타낸다.
- 패턴만 있는 경우 : 패턴과 일치하는 라인을 화면에 출력한다.
- 액션만 있는경우 : 모든 라인이 액션의 대상이 된다.
awk 시스템 변수
awk가 내부적으로 인식하는 변수들이다. 이것을 이용하면 조금 더 효율적으로 사용 할 수 있다.
변수명 |
내용 |
FILENAME |
현재 처리중인 파일명 |
FS |
필드 구분자로 디폴트는 공백 |
RS |
레코드 구분자로 디폴트는 새로운 라인 |
NF |
현재 레코드의 필드 개수 |
NR |
현재 레코드의 번호 |
OFS |
출력할 때 사용하는 FS |
ORS |
출력할 때 사용하는 RS |
$0 |
입력 레코드의 전체 |
$n |
입력 레코드의 n번째 필드 |
awk 사용 예
awk "{print FILENAME}" test.txt
= test.txt 파일의 레코드 개수만큼 파일이름을 출력한다.
awk "{print NR}" test.txt
= test.txt 파일의 레코드 번호를 출력한다.
awk 'BEGIN {FS="\t"} {print $1 , $2}' test.txt