page

Nov 18, 2018

awk Command In Text Processing

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
!(CONDITION)
 
 













No comments:

Post a Comment