반달가면 이글루에서 백업 - http://bahndal.egloos.com/589573
awk에서 텍스트 파일에 대한 작업을 시작하기 전, 또는 모든 작업이 끝난 후에 실행할 명령어를 지정해 줄 수 있다. 시작전을 나타내는 구문은 BEGIN, 끝난 후는 END로 지정한다. 아래의 예시를 보자.
awk 'BEGIN { print "작업을 시작합니다." }
...
END { print "작업을 완료했습니다." }' my_file.txt
굳이 이러한 구문이 필요할까 싶을 수도 있겠지만 의외로 요긴하다. 특정 디렉토리에서 특정 파일의 용량 합계를 awk를 이용해서 계산하는 방법을 다룬 이전 게시물을 보면 END 구문이 마지막 결과 출력에 활용되고 있음을 볼 수 있다.
BEGIN 또는 END 영역을 시작하는 중괄호({)는 반드시 BEGIN/END와 같은 줄에 위치하도록 하자. 그렇지 않으면 "BEGIN blocks must have an action part" 또는 "END blocks must have an action part" 오류 메세지가 나올 것이다. 여러 줄로 작성할 때 가독성만 생각하고 중괄호를 다음 줄에 적으면 안된다.
# 오류 발생 "BEGIN blocks must have an action part"
awk 'BEGIN
{
print "작업을 시작합니다."
}
...
END { print "작업을 완료했습니다." }' my_file.txt
위의 경우 BEGIN 다음에 중괄호가 다음줄에 있어서 BEGIN 영역의 시작 부분이 없는 것으로 간주하게 되어 오류가 발생한다. 아래와 같이 BEGIN 다음에 중괄호를 나오게 해야 한다.
# 정상동작
awk 'BEGIN {
print "작업을 시작합니다."
}
...
END { print "작업을 완료했습니다." }' my_file.txt
'bash script' 카테고리의 다른 글
[bash: while, read, <] 텍스트 파일을 한줄씩 읽어서 작업하기 (0) | 2023.07.20 |
---|---|
[bash: grep] 두개의 파일에서 공통으로 출현하는 문자열 찾기 (0) | 2023.07.19 |
[bash: awk] 조건에 따른 문자열 작업 (0) | 2023.07.19 |
[bash: read] read 명령의 요긴한 옵션 몇가지 (0) | 2023.07.19 |
[bash: sed] sed에서 영역 구분을 이용한 문자열 재구성 작업 (역슬래시-괄호) (0) | 2023.07.19 |