티스토리 뷰
반응형
awk란 리눅스에서 사용하는 스크립트 언어로, 만든 개발자들의 이름 앞 글자를 따 이름을 지었다고 한다.
(Aho, Weinberger, Kernighan)
awk 프로그램
간단한 건 직접 입력해 수행할 수 있지만, 보통은 프로그램 파일로 작성해 -f 옵션으로 수행한다.
시스템은 텍스트 파일에서 각 줄(line)을 필드로 구분하고, 각 line마다 awk 프로그램이 지시하는 대로 처리한다.
$ awk 프로그램 파일*
$ awk -f 프로그램파일 파일*
awk 프로그램의 구성
[ 조건 ] [ { 액션 } ]
→ 입력받은 파일에서 각 줄(line)을 스캔한 뒤, 만약 조건을 만족한다면 그 줄에서 액션을 수행합니다.
awk 시스템 변수
- FILENAME : 현재 처리 중인 입력 파일의 이름
- NR : 현재 레코드(line)의 번호
- NF : 현재 레코드의 필드 개수
- $1 : 첫 번째 필드
- $NF : 마지막 필드
- $0 : 한 줄 전체
조건
조건문의 종류
- BEGIN : 파일의 시작
- END : 파일의 끝
- 관계 연산자, 논리 연산자를 포함한 조건식
- /패턴/ : 패턴에 해당하는 줄
- 패턴1, 패턴2 : 패턴1을 포함한 줄부터 패턴2를 포함한 줄까지
액션
액션에 들어가는 실행문들
- if (조건) 실행문 [else 실행문]
- while(조건) 실행문
- for( 식; 조건; 식) 실행문
- break
- continue
- 변수 = 식
- print [식들의 리스트]
- printf 포맷 [, 식들의 리스트]
- next : 현재 줄에 대한 나머지 패턴들을 건너뜀
- exit : 현재 줄의 나머지 부분들을 건너뜀
- { 실행문 리스트 }
간단한 awk 프로그램의 예시)
# you.txt의 2번째 줄과 3번째 줄에서 '현재 줄 번호, 첫 번째 필드, 세 번째 필드, 마지막 필드'를 출력한다.
$ awk `NR > 1 && NR < 4 { print NR, $1, $3, $NF }` you.txt
# you.txt 파일의 끝에서 현재 줄 번호를 출력한다.
$ awk `END { print NR } ` you.txt
awk 프로그램의 예시)
# 매 줄마다 첫 번째 필드와 마지막 필드를 출력하는 프로그램
BEGIN { print "파일 시작:", FILENAME } # BEGIN { 액션 } : 입력을 읽기 전에 주어진 '액션'을 먼저 실행
{ print $1, $NF } # { 액션 } : 매 줄을 읽을 때마다 '동작' 실행
END { print "파일 끝" } # END { 액션 } : 마지막에 주어진 '액션' 실행
# 각 줄마다 첫 번째 필드를 3번, 5번, 7번 ... , NF번 씩 출력하는 프로그램
{
for (i = 3; i <= NF; i += 2)
printf"%s", $1
printf "\n"
}
# st로 시작해 한 자리 이상의 다른 문자가 존재하고 e로 끝나는 문자열(패턴)이 있으면, 줄의 전체 내용을 출력하는 프로그램
/st.*e/{print $0}
BEGIN{
FS="[^a-zA-Z]+" # FS : 필드 구분 변수, + : 1번 이상 (즉, 필드를 영어가 아닌 문자열을 기준으로 구분한다)
}
{
for (i=1; i<=NF; i++)
words[tolower($i)]++ # words 배열에 각 필드를 소문자로 변환해 저장한다.
}
END {
for (w in words) # 소문자로 저장된 문자열들을 불러와
print w, word[w] # 출력한다.
}
반응형
'LINUX' 카테고리의 다른 글
[18] 리눅스 - 변수(환경변수, 지역변수, read, declare), 수식(연산자), 조건문, 반복문, 함수, 디버깅, shift (0) | 2022.06.27 |
---|---|
[17] 리눅스 - Bash 쉘 스크립트 작성 (bash shell, alias, history, 명령 재실행) (0) | 2022.06.27 |
[15] 리눅스 - 디스크(df, du) 및 tar 아카이브, 압축(gzip, compress), rpm (0) | 2022.06.21 |
[14] 리눅스 - cron 시스템(crontab, at, atq) (0) | 2022.06.21 |
[13] 리눅스 - 파일 분리(split), 합병(cat, paste) (0) | 2022.06.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Baekjoon27211
- cron시스템
- baekjoon
- awk프로그램
- 쇼미더코드
- linux파일
- linuxawk
- 버추억박스오류
- 코테
- 리눅스cron
- GithubAPI
- linuxgedit
- atq
- OnActivityForResult
- linuxtouch
- 백준
- Linux
- api문서
- 버추억박스에러
- cat
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- virtualbox
- 리눅스
- 백준27211
- 백준27219
- whatis
- GitHubAPIforJava
- E_FAIL
- Baekjoon27219
- 사용자ID
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함