awk [옵션] '패턴 { 액션 }' 대상 파일
awk [옵션] -f awk_프로그램_파일 대상 파일
명령어 | awk [옵션] '패턴 {액션}'
1. 액션
- awk 액션은 {} 괄호 사이에 기술
액션 | 설명 |
대상 파일 내용을 그대로 출력 | |
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 |