행위

"Awk 명령어"의 두 판 사이의 차이

DB CAFE

(새 문서: == awk 명령어 == <source lang=bash> awk [OPTION...] [awk program] [ARGUMENT...] OPTION -F : 필드 구분 문자 지정. -f : awk program 파일...)
 
2번째 줄: 2번째 줄:
 
<source lang=bash>
 
<source lang=bash>
 
awk [OPTION...] [awk program] [ARGUMENT...]
 
awk [OPTION...] [awk program] [ARGUMENT...]
       OPTION
+
       [OPTION]
 
         -F        : 필드 구분 문자 지정.
 
         -F        : 필드 구분 문자 지정.
 
         -f        : awk program 파일 경로 지정.
 
         -f        : awk program 파일 경로 지정.
 
         -v        : awk program에서 사용될 특정 variable값 지정.
 
         -v        : awk program에서 사용될 특정 variable값 지정.
       awk program
+
 
 +
       [awk program]
 
         -f 옵션이 사용되지 않은 경우, awk가 실행할 awk program 코드 지정.
 
         -f 옵션이 사용되지 않은 경우, awk가 실행할 awk program 코드 지정.
       ARGUMENT
+
 
 +
       [ARGUMENT]
 
         입력 파일 지정 또는 variable 값 지정.
 
         입력 파일 지정 또는 variable 값 지정.
 
</source>
 
</source>
17번째 줄: 19번째 줄:
  
 
==== "BEGIN"과 "END" 패턴 사용 예제 ====
 
==== "BEGIN"과 "END" 패턴 사용 예제 ====
<source lang=sql>
+
<source lang=bash>
$ awk 'BEGIN { print "TITLE : Field value 1,2"} {print $1, $2} END {print "Finished"}' file.txt
+
$ awk 'BEGIN { print "TITLE : Field value 1,2"}  
 +
            {print $1, $2}  
 +
        END {print "Finished"}'  
 +
      file.txt
 
</source>
 
</source>
  
 
=== 사용 예제 ===
 
=== 사용 예제 ===
 +
 
==== file.txt의 모든 레코드 출력 ====
 
==== file.txt의 모든 레코드 출력 ====
 
<source lang=bash>
 
<source lang=bash>
$ awk '{ print }' ./file.txt       
+
awk '{ print }' ./file.txt       
 
</source>
 
</source>
  
 
==== file.txt에서 p를 포함하는 레코드 출력 ====
 
==== file.txt에서 p를 포함하는 레코드 출력 ====
<source lang=sql>
+
<source lang=bash>
$ awk '/p/' ./file.txt
+
awk '/p/' ./file.txt
 
</source>
 
</source>
  
 
==== 레코드 길이 10 이상인 경우, 세 번째($3), 네 번째($4), 다섯 번째($5) 필드 출력 ====
 
==== 레코드 길이 10 이상인 경우, 세 번째($3), 네 번째($4), 다섯 번째($5) 필드 출력 ====
<source lang=sql>
+
<source lang=bash>
$ awk 'length($0) > 10 { print $3, $4, $5} ' ./file.txt
+
awk 'length($0) > 10 { print $3, $4, $5} ' ./file.txt
 
</source>
 
</source>
  
 
==== 필드 값 출력 ====
 
==== 필드 값 출력 ====
<source lang=sql>
+
<source lang=bash>
 
awk '{ print $1 }' [FILE]
 
awk '{ print $1 }' [FILE]
 
</source>
 
</source>
  
필드 값에 임의 문자열을 같이 출력
+
==== 필드 값에 임의 문자열을 같이 출력 ====
 +
<source lang=bash>
 
awk '{print "STR"$1, "STR"$2}' [FILE]
 
awk '{print "STR"$1, "STR"$2}' [FILE]
 
+
</source>
지정된 문자열을 포함하는 레코드만 출력
+
==== 지정된 문자열을 포함하는 레코드만 출력 ====
 +
<source lang=bash>
 
awk '/STR/' [FILE]
 
awk '/STR/' [FILE]
 
+
</source>
특정 필드 값 비교를 통해 선택된 레코드만 출력 awk '$1 == 10 { print $2 }' [FILE]
+
==== 특정 필드 값 비교를 통해 선택된 레코드만 출력 ====
 
+
<source lang=bash>
특정 필드들의 합 구하기
+
awk '$1 == 10 { print $2 }' [FILE]
 
+
</source>
 +
==== 특정 필드들의 합 ====
 +
<source lang=bash>
 
awk '{sum += $3} END { print sum }' [FILE]
 
awk '{sum += $3} END { print sum }' [FILE]
 
+
</source>
여러 필드들의 합 구하기
+
==== 여러 필드들의 합 구하기 ====
 +
<source lang=bash>
 
awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE]
 
awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE]
 
+
</source>
레코드 단위로 필드 합 및 평균 값 구하기
+
==== 레코드 단위로 필드 합 및 평균 값 ====
 +
<source lang=bash>
 
awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE]
 
awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE]
 
+
</source>
필드에 연산을 수행한 결과 출력하기
+
==== 필드에 연산을 수행한 결과 출력  ====
 +
<source lang=bash>
 
awk '{print $1, $2, $3+2, $4, $5}' [FILE]
 
awk '{print $1, $2, $3+2, $4, $5}' [FILE]
 
+
</source>
레코드 또는 필드의 문자열 길이 검사
+
==== 레코드 또는 필드의 문자열 길이 검사 ====
 +
<source lang=bash>
 
awk ' length($0) > 20' [FILE]
 
awk ' length($0) > 20' [FILE]
 
+
</source>
파일에 저장된 awk program 실행
+
==== 파일에 저장된 awk program 실행 ====
 +
<source lang=bash>
 
awk -f [AWK FILE] [FILE]
 
awk -f [AWK FILE] [FILE]
 
+
</source>
필드 구분 문자 변경하기
+
==== 필드 구분 문자 변경하기 ====
 +
<source lang=bash>
 
awk -F ':' '{ print $1 }' [FILE]
 
awk -F ':' '{ print $1 }' [FILE]
 
+
</source>
awk 실행 결과 레코드 정렬하기
+
==== awk 실행 결과 레코드 정렬하기 ====
 +
<source lang=bash>
 
awk '{ print $0 }' [FILE]
 
awk '{ print $0 }' [FILE]
 
+
</source>
특정 레코드만 출력하기
+
==== 특정 레코드만 출력하기 ====
 +
<source lang=bash>
 
awk 'NR == 2 { print $0; exit }' [FILE]
 
awk 'NR == 2 { print $0; exit }' [FILE]
 
+
</source>
출력 필드 너비 지정하기
+
==== 출력 필드 너비 지정하기 ====
 +
<source lang=bash>
 
awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE]
 
awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE]
 
+
</source>
필드 중 최대 값 출력
+
==== 필드 중 최대 값 출력 ====
 +
<source lang=bash>
 
awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE]
 
awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE]
 +
</source>

2023년 8월 31일 (목) 21:02 판

thumb_up 추천메뉴 바로가기


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 패턴 "BEGIN" 과 "END"[편집]

  1. awk가 BEGIN 패턴을 식별하면 입력 데이터로부터 첫 번째 레코드를 처리하기 전에 "BEGIN"에 지정된 액션 실행
  2. "END" 패턴은 "BEGIN"과 반대로, 모든 레코드를 처리한 다음 "END"에 지정된 액션을 실행

1.1.1 "BEGIN"과 "END" 패턴 사용 예제[편집]

$ awk 'BEGIN { print "TITLE : Field value 1,2"} 
             {print $1, $2} 
         END {print "Finished"}' 
       file.txt

1.2 사용 예제[편집]

1.2.1 file.txt의 모든 레코드 출력[편집]

awk '{ print }' ./file.txt

1.2.2 file.txt에서 p를 포함하는 레코드 출력[편집]

awk '/p/' ./file.txt

1.2.3 레코드 길이 10 이상인 경우, 세 번째($3), 네 번째($4), 다섯 번째($5) 필드 출력[편집]

awk 'length($0) > 10 { print $3, $4, $5} ' ./file.txt

1.2.4 필드 값 출력[편집]

awk '{ print $1 }' [FILE]

1.2.5 필드 값에 임의 문자열을 같이 출력[편집]

awk '{print "STR"$1, "STR"$2}' [FILE]

1.2.6 지정된 문자열을 포함하는 레코드만 출력[편집]

awk '/STR/' [FILE]

1.2.7 특정 필드 값 비교를 통해 선택된 레코드만 출력[편집]

awk '$1 == 10 { print $2 }' [FILE]

1.2.8 특정 필드들의 합[편집]

awk '{sum += $3} END { print sum }' [FILE]

1.2.9 여러 필드들의 합 구하기[편집]

awk '{ for (i=2; i<=NF; i++) total += $i }; END { print "TOTAL : "total }' [FILE]

1.2.10 레코드 단위로 필드 합 및 평균 값[편집]

awk '{ sum = 0 } {sum += ($3+$4+$5) } { print $0, sum, sum/3 }' [FILE]

1.2.11 필드에 연산을 수행한 결과 출력[편집]

awk '{print $1, $2, $3+2, $4, $5}' [FILE]

1.2.12 레코드 또는 필드의 문자열 길이 검사[편집]

awk ' length($0) > 20' [FILE]

1.2.13 파일에 저장된 awk program 실행[편집]

awk -f [AWK FILE] [FILE]

1.2.14 필드 구분 문자 변경하기[편집]

awk -F ':' '{ print $1 }' [FILE]

1.2.15 awk 실행 결과 레코드 정렬하기[편집]

awk '{ print $0 }' [FILE]

1.2.16 특정 레코드만 출력하기[편집]

awk 'NR == 2 { print $0; exit }' [FILE]

1.2.17 출력 필드 너비 지정하기[편집]

awk '{ printf "%-3s %-8s %-4s %-4s %-4s\n", $1, $2, $3, $4, $5}' [FILE]

1.2.18 필드 중 최대 값 출력[편집]

awk '{max = 0; for (i=3; i<NF; i++) max = ($i > max) ? $i : max ; print max}' [FILE]