본문 바로가기
Linux/Shell Script

awk 명령어

by Luuii 2017. 10. 15.

1. 자료처리 및 리포트 생성에 사용하는 프로그래밍 언어.

 

2. 데이터를 조작할 수 있음.

 

3. 파일을 행 단위로 조사.

 

4. 특정한 action이 정의되지 않은 패턴은 출력만 하며, 작업은 정의되었으나 패턴이 지정되지 않은 경우는 해당 작업에 지정된 모든 행에 대해서 처리.

 

5. 입력 파일이름을 특별히 지정하지 않으면 표준 입력(키보드)로부터 입력 받는 것으로 간주.

 

awk 'pattern' filename

awk '{action}' filename

awk 'pattern {action}' filename

 

6. awk '/Mary/' employees    -> 패턴 Mary가 포함된 행을 출력

 

7. awk '{pinrt $1}' employees    -> 파일의 첫 번째 필드 출력.        //필드 : 각 행의 맨 왼쪽 경계에서 시작하고 공백문자로 구분되는 영역.

 

8. awk '/Sally/{print $1, $2}' employees    -> Sally를 포함하는 행들의 첫 번째, 두 번째 필드 출력.

 

9. df | awk '$4 > 75000'    -> df 명령어의 4번째 필드가 75000블록보다 큰 행 출력.

 

10. date \ awk '{ print "Month: " $2 "\nYear: " , $6 }'    -> C 출력값 생각하면 됨.

 

11. awk '/Sally/{print "\t\tHave a nice day, " $1, $2 "!"}' employees    -> 파일에서 Sally가 포함된 행을 찾으면 탭 2개와 구문과 1,2,번째 필드, !출력.

 

12. 숫자에 서식을 지정하여 출력 할때는 일반적으로 printf 지만 OFMT라는 awk 특수변수를 이용하여 지정 할 수 있음.

 

13. 기본값은 "%.6g"    -> 소수점 이하 여섯 자리까지 출력한다는 의미.

> awk 'BEGIN{OFMT="%.2f"; print 1.2456789, 12E-2}'    -> 부동소수점 형 숫자를 소수점 이하 두자리 까지 출력하도록 OFMT변수 설정.

 

14. printf는 각각의 퍼센트 기호(%)와 서식 지정자에는 대응하는 인자가 필요. 문자 자체로서의 %를 출력하고자 한다면, %%.

 

15. echo "UNIX" | awk '{printf "%-15s|\n", $1}'

echo "UNIX" | awk '{printf "%15s\n", $1}'

 

16. awk '{printf "The name is: %-15s ID is %8d\n", $1, $3}' employees

 

 

17. awk 명령어가 파일 안에 위치하면, 파일이름 안에 -f를 사용하고 그 뒤에 입력 파일을 지정.

입력 파일의 한 행을 읽어서 awk 명령어가 들어잇는 파일의 내용을 수행

 처리가 끝나면, 버퍼를 청소하고 다음 행을 읽어와서 처리.

  패턴이 동작을 제어하지 않는 경우 기본 값으로 모든행이 출력.

   패턴에 특별한 동작이 지정되지 않는 경우에 기본값은 패턴과 일치하는 행만 출력.

 

18. awk에서 하나의 레코드는 $0 변수로 참조 할 수 있다.

awk '{print}' employees 도 같은 출력값

 

19. awk '{print NR, $0}' employees    -> 각 레코드($0)가 변수에 저장된 레코드 번호와 함께 파일의 내용대로 출력된다.

 

20. 각 레코드는 필드라는 단어들로 구성. 기본적으로 필드는 공백(스페이스 혹은 탭)으로 구분.

 

21. 필드 개수는 버전에 따라 다르지만, 일반적으로 라인 당 100개 이하의 값을 갖도록 제한.

 

22. awk '{print NR, $1, $2, $5}' employess    -> 각 레코드의 번호(NR)와 함께 1, 2, 5번째 필드를 출력.

 

23. awk '{print $0, NF}' employees    -> 파일 내의 각 레코드를 출력하고, 이어서 필드 개수(NF)를 출력한다.

 

24. awk '$3 < 4000' employees    -> 3번 째 필드가 4000보다 작은 레코드가 출력.

 

25. 동작은 중괄호 안에 기술, 각 동ㅈ가들은 세미콜론(;)으로 구분.

pattern{ action statement; action statement; etc. }

or

pattern{

action statement

action statement

}

 

26. awk '/Tom/{print "Hello there, " $1}' employees    -> 패턴 Tom을 포함하는 레코드가 있으면 Hello tere, Tom 출력.

 

27. awk에서 쓰이는 정규표현식은 슬래시(/) 사이에 오는 문자들로 구성된 패턴. egrep과 마찬가지로 정규표현식 메타문자 사용을 허용.

 

28. awk '/^[A-Z][a-z]+ /' employees    -> 파일안에서 대문자 하나와 하나이상의 소문자 그리고 공백이 이어지는 패턴으로 시작하는 행을 출력.

 

29. match 연산자(~, tilde)는 특정 레코드나 필드 내에서 일치하는 정규표현식 패턴이 존재 하는지 검사하는데 쓰임.

 

30. awk '$1 ~ /[Bb]ill/' employees    -> 첫 번째 필드에 Bill이나 bill이 포함된 행을 출력.

 

31. awk '$1 !~ /ly$/' emplyees    -> 첫 번째 필드가 ly로 끝나지 않는 행들을 출력.

 

32. awk '{print $3 $2}' datafile    -> 3번째 필드 바로 다음에 2번 째 필드가 옴. $3과 $2 사이에 쉽표(,)가 없기 때문에 두 필드가 스페이스로 구문되지 않음.

 

33. awk '$8 ~ /[0-9][0-9]$/{print $8}' datafile    -> 8번째 필드가 두 자리 숫자면 그 필드가 출력.

 

 

34. 조건식에는 물음표(?)와 콜론(:) 두 가지 기호를 사용.

conditional expression1 ? expression2 : expression3

if (expression1)

expression2

esle

expression3

}

 

35. awk '{max=($1 > $2) ? $1 : $2; print max}' filename    -> 파일 내에서 $1가 $2 보다 크면 max에 저장

if ($1 > $2)

max=$1

else

max=$2

 

36. awk는 명령행 인자가 BEGIN문에서 처리될 수 있도록하는 -v 옵션을 지원.

 

 

37. BEGIN 패턴에는 awk가 입력 파일을 처리하기 전에 수행해야 할 동작들을 지정한 블록이 따라옴.

실재로 awk는 BEGIN의 동작 블록이 수행되기 전까지는 입력 파일을 읽지 않기 때문에 특별한 입력 파일을 지정하지 않고도 BEGIN의 동작 블록을 시험해볼 수 있다.

BEGIN은 OFS, OS, FS 등과 같은 내장변수의 값을 변경하거나, 사용자 정의 변수의 초기화, 헤더나 제목의 출력 등에 쓰이기도 한다.

 

38. awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n}{print $1,$2,$3} ' file    -> 입력파일이 처리되기 전에 필드 구분자(FS)는 콜론(:)으로 ,출력 필드 구분자(OFS)는 탭으로 변경하고, 출력 레코드 구분자(ORS)를 두 개의 개행문자로 지정.

반응형

'Linux > Shell Script' 카테고리의 다른 글

sed 명령어  (0) 2017.10.15
잘 작성된 쉘 스크립트 예제들  (0) 2017.10.13
UID 번호 0번인 것들만 색출하는 스크립트  (0) 2017.10.13
파일이름 자동변경 스크립트  (0) 2017.10.13
원격 관련 스크립트  (0) 2017.10.13