shell_script

shell 기본 awk

sysman 2021. 7. 29. 18:43

awk [옵션] '패턴 { 액션 }' 대상 파일

 

 

awk [옵션] -f awk_프로그램_파일 대상 파일

 

 

명령어 | awk [옵션] '패턴 {액션}'

 

 

1. 액션

- awk 액션은 {} 괄호 사이에 기술

액션  설명
print 대상 파일 내용을 그대로 출력
print 필드리스트 대상 파일의 필드 인덱스 ($0 ~ $n), 자체변수 (NF, FNR 등), 문자열 등을 조합하여 명시한 대로 출력
print 필드리스트 > 파일 대상 파일의 필드 인덱스 ($0 ~ $n), 자체변수 (NF, FNR 등), 문자열 등을 조합하여 명시한 대로 파일에 출력
printf 포맷, 필드리스트 명시한 대상 파일의 필드 인덱스를 명시한 포맷에 맞추어 출력
printf 포맷, 필드리스트 > 파일 명시한 대상 파일의 필드 인덱스를 명시한 포맷에 맞추어 파일에 출력
getline 대상 파일의 짝수 라인과 마지막 라인을 읽어들임. 단독으로 사용할 수 없으며, print 등과 함께 사용
getline var 대상 파일의 홀수 라인을 읽어들여 단독으로 사용할 수 없으며, print 등과 함께 사용
getline < 파일 명시한 파일의 값을 읽어들임. 단독으로 사용할 수 없으며, print등과 함께 사용
getline var < 파일 명시한 파일의 값을 읽어 var에 저장함. print등과 함께 사용해야 하며 파일에 명시된 숫자에 해당하는 필드를 출력함

 

첫번째 필드와 8번째 필드 출력

FNR은 파일의 레코드번호를의미로 awk 자체 변수

$0은 필드 인덱스가 아닌 파일 전체 내용을 보는것

 

 

 

 

8번째와 6번째 필드 출력 하되, 8번째 필드는 10컬럼에 맞춰 출력, 6번쨰 필드는 그냥 문자열로 출력

 

 

getline 은 대상파일로 부터 라인을 읽는다 의미, getline은 print 문 앞에 사용, 대상파일의 짝수번쨰와 마지막 필드을 읽음

$NF 는 number of field 로 대상파일의 필드 개수를  의미, awk에서 제공하는 내장변수

getline var는 getline과 반대로 홀수번쨰와 마지막 필드값을 출력

awk-filetype.txt의 값을 첫 번째 필드값으로 변경하여 출력

awk-test.txt값을 읽어 var에 저장하고, var에 해당하는 필드값 출력

 

2. 패턴

패턴 내용
BEGIN { 액션 }
END { 액션 }
입력된 데이터의 첫번쨰 레코드를 읽기 전에 BEGIN에 의해 선언된 액션을 먼저 처리하며, END는 모든 작업 완료 후 마지막에 END액션을 처리함
BEGINFILE { 액션 }
ENDFILE { 액션 }
BEGIN { 액션 }, END { 액션 } 과 동일하며, FILENAME이라는 awk 자체 변수를 사요할 경우에만 BEGINFILE과 ENDFILE을 사용함
/정규 표현식/ 패턴을 정규 표현식 형태로 작성할 경우 슬래시//사이에 표현함
관계식 관계식은 말 그대로 필드와 패턴 값을 비교할 경우 산술 연산자를 사용하여 비교할 수 있음
패턴1 && 패턴2 패턴이나 관계식을 AND 연산함
패턴1 || 패턴2 패턴이나 관계식을 OR 연산함
패턴1 ? 패턴2 : 패턴3 C의 연산자와 같은 의미로 패턴1 (또는 관계식)이 true이면 패턴2가 리턴되며, false이면 패턴3이 리턴됨
( 패턴 ) 패턴이나 관계식을 그룹핑하거나 우선순위를 높임
! 패턴 패턴이나 관계식을 NOT 연산함
패턴1, 패턴2 패턴1, 패턴2  형식을 범위 패턴이라고 하며, 패턴1부터 패턴2 사이에 해당하는 레코드를 출력함

 

 

8번째 필드 출력 후 NR(레코드 수)를 출력

 

 

 

 

$NF는 마지막 필드값(파일명 또는 디렉토리명)

레코드 번호가 1 이 아니고 디렉토리 인 경우만 디렉토리 목록 출력

 

파일 소유자가 nalee가 아니거나 파일 사이즈가 0인 파일 출력

패턴 1이 참이면 패턴 2 출력,  패턴1이 거짓이면 패턴 3 출력

2번째 필드값이 2이면 directory를 res에 저장, 거짓이면 file로 저장

파일명은 10 칸 내에 맞추고, res 변수값과 뉴라인을 추가하여 출력 ($NF는 마지막 필드값)

 

파일레코드 번호 2부터 5까지에 해당하는 파일 목록 출력

 

 

 

 

3. 표준옵션

옵션 내용
-f 파일 / --file 파일 awk 프로그램(패턴 {액션}) 을 파일에 저장하고, 해당 파일을 이용하여 필요한 필드 및 레코드를 추출함
-F 구분 기호
--field-separator 구분기호
필드구분 기호를 변경할 수 있음. awk의 기본 필드구분 기호는 스페이스이지만, -F 옵션을 통해 필드구분 기호를 변경할 수 있음
-v 변수=값
--assign 변수=값
필드 및 레코드를 출력할 때 -v 옵션을 통해 변수의 값을 함께 출력할 수 있음

 

-F 옵션을 이용하여 구분기호를 명시

 

 

확장옵션

옵션 내용
-b / --characters-as-bytes 입력되는 문자열을 바이트로 처리하며, 문자열 길이를 구하는 length() 같은 함수의 결과값에 영향을 줌
-C /--copyright GNU 라이센스 정보를 보여줌
-d파일명
--dump-variables=파일명
Awk 내장 변수와 값을 명시한 파일에 저장하여 확인할 수 있음
-h /--help Awk에 대한 사용법 및 옵션을 보여줌
-L 'fatal' /--init='fatal' 구문 오류에 대한 에러 메세지를 자세하게 보여줌
-p파일명
--profile=파일명
system() 함수, getline, 프린트 함수를 이용한 redirection, 확장 모듈 사용을 할 수 없음
-S /--sandbox
-V /--version
Awk에 대하나 버전 정보를 보여줌

 

-p 옵션은 awk 액션/패턴에 해당하는 구문을 파싱하여 저장

 

-S는 대상파일을 제외한 이외 파일의 접근을 차단

첫번째 필드값을 filetype.txt로 변경하여 출력했으나 -S 옵션에 의행 파일 내용을 읽어 올 수 없음을 확인할 수 있다.

awk 버전 정보

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'shell_script' 카테고리의 다른 글

shell - system 관련 스크립트  (0) 2021.08.02
shell 기본 sed  (0) 2021.07.30
shell 기본 find  (0) 2021.07.29
shell 기본 grep  (0) 2021.07.27
shell 기본 명령문  (0) 2021.07.27