위로 아래

awk

awk (오크)

  1. Aho Weinberger Kernighan이 만들었고 이니셜을 따서 이름을 지었다
  2. unix에서 개발된 스크립트 언어로 제작
  3. 텍스트가 저장되어 있는 파일을 원하는 대로 필터링 / 추가 / 가공해서 나온 결과를 행과 열로 출력해준다

 

기본 형식

1. 파일을 취급할 때
awk [option] 'pattern {action}' [file]

2. 다른 command의 결과를 취급할 때
command | awk [option] 'pattern {action}'

 

  1. ' ' : awk의 길이를 표시
  2. " " : 큰 따옴표 안은 함수가 아니라 문자
  3. $0 : record
  4. $1 : 첫번째 field
  5. pattern : 패턴이 없으면 전체 record를 가져오고, 패턴이 있으면 특정 record만 가져온다 (pattern 생략 시 전체 record 취급)
  6. action : print 함수 등으로 스크립트를 수행할 수 있다 (생략 시 기본 action인 print 실행)

 

 

-v option

awk -v [var]=[val] : 외부 변수를 awk 스크립트 내에서 사용할 수 있도록 전달

VAR=value
echo text | awk -v var=$VAR '{print $0, var}'

#결과
text value

 

 

-F option

awk -F[특수문자] {print $1} : 해당 특수문자로 값을 구분해서 처리

echo "file4~file5~ file6" | awk -F "~" '{print $1, $2, $3};

 

 

 awk가 하는 일

  1. 출력
  2. 문자 추가
  3. 필터링
  4. 조건문
  5. 함수

 

내장 변수

  1. FILENAME : 현재 입력파일의 이름
  2. $0 : 입력 레코드
  3. $n : 입력 레코드의 N번째 필드
  4. ENVIRON : 환경변수를 모아둔 관계형 배열
  5. NR : 출력 순번 
  6. NF : 현재 줄의 필드수
  7. ARGC : 명령줄 인자의 개수
  8. ARGV : 명령줄 인자들의 배열
  9. FNR : 현재파일에서의 레코드 번호
  10. FS : 입력 필드 구분자
  11. OFMT : 숫자들의 표현형식
  12. OFS : 출력필드 구분자
  13. ORS : 출력 레코드 구분자
  14. RS : 입력코드 구분자
  15. EP : 서브스크립트의 구분자
  16. RLENGTH : match 함수로 일치하는 문자열의 길이
  17. RSTART : match 함수로 일치하는 문자열의 오프셋

 

 

 

 


print

원본 데이터

 

1열 출력

awk '{print $1}' ./test.txt

 

1,3열 출력

awk '{print $1, $3} ./test.txt

 

문자를 포함한 record 출력

awk '/34/' ./test.txt

 

 

문자열과 함께 출력

awk '{print "1열은 ", $1, "입니다."}' ./test.txt

 

awk '{print ("name : " $1, "/ ", "phone : ", $2)}' ./test.txt

 

 

특정 record 검색해서 출력

(if 생략 가능)

awk '{if($5>=80) print ($0)}' ./test.txt

awk '$5>=80 {print $0}' test.txt

 

awk '{if($4=="M") print ($0)}' ./test.txt

 

awk '{if($4 == "M" && $5 >= 80) print $0}' ./test.txt

 

 

 

 

 


BEGIN / END

BEGIN : record를 처리하기 전에 BEGIN에 지정된 action을 먼저 수행

END : record를 모두 처리한 후에 END에 지정된 action을 수행

 

awk 'BEGIN {print "시작"} {print $1, $2} END {print "끝"} ' ./test.txt

 

 

 

 

 

 

 

참고

https://recipes4dev.tistory.com/171

 

리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최

recipes4dev.tistory.com

https://reakwon.tistory.com/163#google_vignette

 

[리눅스] awk 명령어 사용법과 여러가지 실용적인 예제 모음

더 많은 정보를 담은 리눅스 교재를 배포했습니다. 아래의 페이지에서 리눅스 교재를 받아가세요. https://reakwon.tistory.com/233 리눅스 프로그래밍 note 배포 티스토리에 리눅스에 관한 내용을 두서없

reakwon.tistory.com