728x90
AWK 명령어 문법
$ awk [옵션] 'pattern { action }' [파일|변수값]
awk 옵션 | 설명 |
-u | 버퍼를 사용하지 않고 출력한다. |
-F | 확장된 정규 표현식으로 필드구분자를 지정한다, 다중 필드 구분자 사용 가능하다. |
awk -F | 단일로 사용시 ':' 를 필드구분자로 사용 |
awk -F'[ :\t]' | 다중 필드구분자 ':'와 tab을 필드구분자로 사용 |
-v | 스크립트를 실행하기 전에 미리 변수를 지정하여 준다. |
-f | awk 명령 스크립트를 파일에서 읽어온다. |
awk 동작 원리 - 패턴(pattern) 과 액션(action)
- awk는 파일 또는 파이프를 통해 입력 라인을 얻어와 $0라는 내부 변수에 라인을 입력한다.
각 라인은 레코드라고 부르고, newline(개행)에 의해 구분되다.
이때 패턴이 없으면 전체 라인을 얻어오고, 원하는 라인만 얻어오고 싶을때는 패턴을 사용해 분별할 수 있다. - awk를 실행할때 내장 변수인 FS라고 부르는 필드 분리자가 공백을 할당 받는다. (필드 분리 기준을 공백이 아닌 다른 값으로 바꿀수도 있다)
그러면 awk는 라인을 공백을 기준으로 각각의 필드나 단어로 나눈다.
필드는 $1부터 시작해서 많게는 $100 이상의 변수에 저장할 수 있다. - 각 필드 데이터들을 저장했다면 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를 포함하는 레코드 출력.
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 |