30 Examples For Awk
https://likegeeks.com/awk-command/
awk and, or, not operator
https://www.poftut.com/awk-logical-operators-not/
awk
awk 는
필드 단위로 패턴을 검색하고, 조작하는 것을 주 목적으로 한다. 파일 내의 각 라인 (레코드)에 대한 필드 를 인식할 수 있는 패턴 검색 기능을 보유하고 있으며, 이를 이용해서 조작도 가능하다.
awk [-f 프로그램파일] [-F 필드구분자] ["패턴{액션}"] [처리할 파일명]
옵션
-f 프로그램 파일
awk 유틸리티의 실행 액션이 저장된 프로그램 파일을 지정
-F 필드 구분자
필드 구분자를 지정
"패턴{액션}"
패턴이 일치하면 액션이 실행된다.
사용예
$> awk -F : "{print $1, $6}" ./text.txt
= text.txt 파일에서 ":" 구부자를 이용하여 1번째와 6번째 필드를 프린트
패턴과 액션의 구조
awk의 옵션 중의 하나였던 ["패턴{액션}"] 에서도 여러가지 구조가 존재한다. 가장 대표적인 3가지를 알아보자
1. BEGIN
- 첫번째 레코드를 읽기 전에 지정된 액션을 실행
2. END
- 마지막 레코드를 읽고 난 후, 지정된 액션을 실행
3. PATTERN
- 입력되는 각 라인(레코드)별로 실행되며, 만약 그 라인이 패턴과 일치할 경우 액션이 실행된다.
- 정규표현식의 경우 "/정규식/" 으로 나타낸다.
- 패턴만 있는 경우 : 패턴과 일치하는 라인을 화면에 출력한다.
- 액션만 있는경우 : 모든 라인이 액션의 대상이 된다.
awk 시스템 변수
awk가 내부적으로 인식하는 변수들이다. 이것을 이용하면 조금 더 효율적으로 사용 할 수 있다.
변수명
|
내용
|
FILENAME
|
현재 처리중인 파일명
|
FS
|
필드 구분자로 디폴트는 공백
|
RS
|
레코드 구분자로 디폴트는 새로운 라인
|
NF
|
현재 레코드의 필드 개수
|
NR
|
현재 레코드의 번호
|
OFS
|
출력할 때 사용하는 FS
|
ORS
|
출력할 때 사용하는 RS
|
$0
|
입력 레코드의 전체
|
$n
|
입력 레코드의 n번째 필드
|
awk 사용 예
awk "{print FILENAME}" test.txt
= test.txt 파일의 레코드 개수만큼 파일이름을 출력한다.
awk "{print NR}" test.txt
= test.txt 파일의 레코드 번호를 출력한다.
awk 'BEGIN {FS="\t"} {print $1 , $2}' test.txt
= test.txt 파일의 필드 구분자를 "\t" 으로 지정하고, 1번째와 2번째 필드를 프린트 한다.
awk 'BEGIN {FS="\t"; OFS ="-"} {print $1 , $2} END {print "총 레코드의 수 : " NR}' test.txt
= test.txt 파일의 필드 구분자를 "\t" 로 지정하고, 1번째와 2번째 필드를 프린트 하되, 필드 구분자를 "-"
로 바꾸어 출력하고, 모든 레코드가 끝난 뒤, 총 레코드의 수를 출력한다.
결과화면
출처:
http://ra2kstar.tistory.com/153 [초보개발자 이야기.]
awk [-f awk_program_file] [-F field identifier] ["pattern{action}"] [input file]
-f awk_program_file
load pre-defined awk run action file
-F field identifier
set field identifier
"pattern{action}"
if find pattern, run action
example
$> awk -F : "{print $1, $6}" ./text.txt
= in text.txt file, use ":" for field identifier, print 1st and 6th field
pattern & action
1. BEGIN
- do action before reading first record
2. END
- do action after reading last record
3. PATTERN
- run by each line (record), if line is matched with pattern, run action
- if you want to use regular expression : "/regular_expression/"
- if you use just pattern : print line which is matched with pattern
- if you use just action : every lines are object of action
and
(CONDITION && CONDITION && ... )
or
(CONDITION || CONDITION || ... )
not