Awk 명령어
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
- 1 awk 명령어
- 1.1 특정 pattern이 포함된 레코드 출력
- 1.2 패턴 "BEGIN" 과 "END"
- 1.3 if 구문 으로 특정 레코드 검색
- 1.4 for 반복문
- 1.5 내장함수
- 1.6 예제 실습
- 1.6.1 file.txt의 모든 레코드 출력
- 1.6.2 file.txt에서 p를 포함하는 레코드 출력
- 1.6.3 레코드 길이 10 이상인 경우, 세 번째($3), 네 번째($4), 다섯 번째($5) 필드 출력
- 1.6.4 필드 값 출력
- 1.6.5 필드 값에 임의 문자열을 같이 출력
- 1.6.6 지정된 문자열을 포함하는 레코드만 출력
- 1.6.7 특정 필드 값 비교를 통해 선택된 레코드만 출력
- 1.6.8 특정 필드들의 합
- 1.6.9 여러 필드들의 합 구하기
- 1.6.10 레코드 단위로 필드 합 및 평균 값
- 1.6.11 필드에 연산을 수행한 결과 출력
- 1.6.12 레코드 또는 필드의 문자열 길이 검사
- 1.6.13 파일에 저장된 awk program 실행
- 1.6.14 필드 구분 문자 변경하기
- 1.6.15 awk 실행 결과 레코드 정렬하기
- 1.6.16 특정 레코드만 출력하기
- 1.6.17 출력 필드 너비 지정하기
- 1.6.18 필드 중 최대 값 출력
1 awk 명령어[편집]
awk [OPTION...] [awk program] [ARGUMENT...]
[OPTION]
-F : 필드 구분 문자 지정.
-f : awk program 파일 경로 지정.
-v : awk program에서 사용될 특정 variable값 지정.
[awk program]
-f 옵션이 사용되지 않은 경우, awk가 실행할 awk program 코드 지정.
[ARGUMENT]
입력 파일 지정 또는 variable 값 지정.
1.1 특정 pattern이 포함된 레코드 출력[편집]
awk '/패턴../' ./awk_test_file.txt
1.2 패턴 "BEGIN" 과 "END"[편집]
- awk가 BEGIN 패턴을 식별하면 입력 데이터로부터 첫 번째 레코드를 처리하기 전에 "BEGIN"에 지정된 액션 실행
- "END" 패턴은 "BEGIN"과 반대로, 모든 레코드를 처리한 다음 "END"에 지정된 액션을 실행
- "BEGIN"과 "END" 패턴 사용 예제
ex 1)
$ awk 'BEGIN { print "TITLE : Field value 1,2"}
{print $1, $2}
END {print "Finished"}'
file.txt
ex 2)
awk '
BEGIN {
sum = 0
cnt = -1
}
{
sum += $5
cnt++
}
END {
avg = sum/cnt
print ("sum :" sum ", average :" avg)
}' ./file.txt
1.3 if 구문 으로 특정 레코드 검색[편집]
awk '{ if ( $5 >= 80 ) print ($0) }' ./file.txt
- if 구문에서 비교하려면 쌍따옴표(") 사용
awk '{ if ( $4 == "M" ) print ($0) }' ./file.txt
1.4 for 반복문[편집]
awk '{
for(i=0;i<2;i++)
print( "for loop :" i "\t" $1, $2, $3)
}' ./file.txt
1.5 내장함수[편집]
- length() : 길이
- substr() : 부분단어 추출
awk '{ print ("name leng : " length($1), "substr(0,3) : " substr($1,0,3)) }' ./file.txt
1.6 예제 실습[편집]
- file : file.txt
name phone birth sex score
sim 010-4321-4321 1999-09-09 F 88
nara 010-1010-2020 1993-12-12 M 20
yut 010-2323-2323 1988-10-10 F 59
kim 010-1234-4321 1977-07-17 M 69
nam 010-4321-7890 1996-06-20 M 75
1.6.1 file.txt의 모든 레코드 출력[편집]
awk '{ print }' ./file.txt
1.6.2 file.txt에서 p를 포함하는 레코드 출력[편집]
awk '/p/' ./file.txt
1.6.3 레코드 길이 10 이상인 경우, 세 번째($3), 네 번째($4), 다섯 번째($5) 필드 출력[편집]
awk 'length($0) > 10 { print $3, $4, $5} ' ./file.txt
1.6.4 필드 값 출력[편집]
awk '{ print $1 }' [FILE]
1.6.5 필드 값에 임의 문자열을 같이 출력[편집]
awk '{print "STR"$1, "STR"$2}' [FILE]
1.6.6 지정된 문자열을 포함하는 레코드만 출력[편집]
awk '/STR/' [FILE]
1.6.7 특정 필드 값 비교를 통해 선택된 레코드만 출력[편집]
awk '$1 == 10 { print $2 }' [FILE]
1.6.8 특정 필드들의 합[편집]
awk '{sum += $3} END { print sum }' [FILE]
1.6.9 여러 필드들의 합 구하기[편집]
awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE]
1.6.10 레코드 단위로 필드 합 및 평균 값[편집]
awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE]
1.6.11 필드에 연산을 수행한 결과 출력[편집]
awk '{print $1, $2, $3+2, $4, $5}' [FILE]
1.6.12 레코드 또는 필드의 문자열 길이 검사[편집]
awk ' length($0) > 20' [FILE]
1.6.13 파일에 저장된 awk program 실행[편집]
awk -f [AWK FILE] [FILE]
1.6.14 필드 구분 문자 변경하기[편집]
awk -F ':' '{ print $1 }' [FILE]
1.6.15 awk 실행 결과 레코드 정렬하기[편집]
awk '{ print $0 }' [FILE]
1.6.16 특정 레코드만 출력하기[편집]
awk 'NR == 2 { print $0; exit }' [FILE]
1.6.17 출력 필드 너비 지정하기[편집]
awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE]
1.6.18 필드 중 최대 값 출력[편집]
awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE]