Linux/쉘스크립트

(AWK) 명령어 문법

쿠카이든 2023. 2. 9. 09:49
728x90
AWK 명령어 문법
 
$ awk [옵션] 'pattern { action }' [파일|변수값]

 

awk 옵션 설명
-u 버퍼를 사용하지 않고 출력한다.
-F  확장된 정규 표현식으로 필드구분자를 지정한다, 다중 필드 구분자 사용 가능하다.
awk -F 단일로 사용시 ':' 를 필드구분자로 사용
awk -F'[ :\t]' 다중 필드구분자 ':'와 tab을 필드구분자로 사용
-v 스크립트를 실행하기 전에 미리 변수를 지정하여 준다.
-f awk 명령 스크립트를 파일에서 읽어온다.

 

awk 동작 원리 - 패턴(pattern) 과 액션(action)
  1. awk는 파일 또는 파이프를 통해 입력 라인을 얻어와 $0라는 내부 변수에 라인을 입력한다.
    각 라인은 레코드라고 부르고, newline(개행)에 의해 구분되다.
    이때 패턴이 없으면 전체 라인을 얻어오고, 원하는 라인만 얻어오고 싶을때는 패턴을 사용해 분별할 수 있다.
  2. awk를 실행할때 내장 변수인 FS라고 부르는 필드 분리자가 공백을 할당 받는다. (필드 분리 기준을 공백이 아닌 다른 값으로 바꿀수도 있다)
    그러면 awk는 라인을 공백을 기준으로 각각의 필드나 단어로 나눈다.
    필드는 $1부터 시작해서 많게는 $100 이상의 변수에 저장할 수 있다.
  3. 각 필드 데이터들을 저장했다면 awk는 액션을 통해 동작 스크립팅을 할 수 있다.
    예를 들어, 필드들을 화면에 출력할 때 print 함수를 사용하면 된다.

 
 
# -F : 필드 구분 문자를 공백 말고 ":" 로 설정
 
# pattern /linux/ : linux 문자열을 포함한 모든 레코드 출력
 
# action {print $1} : 각 행(레코드)에서 첫번째 필드를 출력
 
$ awk -F":" '/linux/ {print $1}' test.txxt

Info

pattern  { action }은 반드시 명령어에 모두 써줘야 되는 건 아니다.

아래와 같이 pattern이 생략되는 경우,
매칭 여부를 검사할 문자열 패턴 정보가 없기 때문에 모든 레코드가 선택되는 거고,
# pattern 생략.
$ awk '{ print }' ./file.txt      # file.txt의 모든 레코드 출력.
 
action을 생략하면, 기본 액션인 print가 실행된다.
# action 생략.
$ awk '/p/' ./file.txt            # file.txt에서 p를 포함하는 레코드 출력.

 

출처 : https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-awk-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%AC%B8%EB%B2%95-%EB%A7%88%EC%8A%A4%ED%84%B0-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

[LINUX] 📚 awk 명령어 문법 마스터 💯 총정리

AWK (Aho Weinberger Kernighan) 개념 AWK는 텍스트가 저장되어 있는 파일을 원하는 대로 필터링하거나 추가해주거나 기타 가공을 통해서 나온 결과를 행과 열로 출력해주는 프로그램 이다. 좀더 쉽게 말

inpa.tistory.com

 

728x90

'Linux > 쉘스크립트' 카테고리의 다른 글

(bash shell) select 문  (0) 2023.03.11
(Bash Shell) while문과 until문 예제  (0) 2023.02.28
(shell script)expr & bc  (0) 2023.02.07
쉘스크립트 예제  (2) 2023.02.06
(shell script) 문자열 패턴 비교  (0) 2023.02.05