반달가면 이글루에서 백업 - http://bahndal.egloos.com/589484
awk 구문의 가장 기본적인 형태는 아래와 같다.
awk '/패턴/ {명령어}' 파일명
텍스트 파일을 한 행씩 읽으면서 일치하는 패턴(문자열)이 보이면 이에 상응하는 명령어를 실행한다. 예를 들어 my_file.txt 파일에서 "abc" 문자열이 있으면 행 전체($0)를 출력하고 "def" 문자열이 있으면 "___" 문자열을 출력한다면 아래와 같이 될 것이다.
awk '/abc/ { print $0 }
/def/ { print "___" }' my_file.txt
위의 예시에서 만약 한 행에 "abc"와 "def"가 둘 다 있다면 행 전체도 출력되고 "___" 문자열도 출력된다.
if/else 조건문을 사용해서 조건에 따라 출력을 지정해 줄 수 있다. 예를 들어 my_file.txt 파일에서 현재 행에 "123" 문자열이 있는 경우에는 행 전체($0)를 출력하고 그렇지 않은 경우엔 첫번째 필드($1)만 출력해야 하는 경우라면 아래와 같이 될 것이다.
awk '{
if (/123/) { print $0 }
else { print $1 }
}' my_file.txt
두번째 필드에 "123" 문자열이 있는 경우에만 행 전체를 출력하고 그렇지 않은 경우에 첫번째 필드만 출력한다면 아래와 같이 될 것이다. (특정 필드에 대한 검색을 다룬 이전 게시물에서 else만 추가된 모양새)
awk '{
if ($2=="123") { print $0 }
else { print $1 }
}' my_file.txt
위의 예시에서 AND/OR 조건도 가능하다. 두번째 필드에 "123" 문자열이 있으면서(AND) 세번째 필드에 "456" 문자열이 있어야 하는 경우라면 아래와 같이 된다.
awk '{
if ($2=="123" && $3=="456") { print $0 }
else { print $1 }
}' my_file.txt
AND 연산은 "&&", OR 연산은 "||" 문자열을 사용한다.
'bash script' 카테고리의 다른 글
[bash: grep] 두개의 파일에서 공통으로 출현하는 문자열 찾기 (0) | 2023.07.19 |
---|---|
[bash: awk] 작업 시작전, 완료후에 실행할 명령어 지정(BEGIN/END) (0) | 2023.07.19 |
[bash: read] read 명령의 요긴한 옵션 몇가지 (0) | 2023.07.19 |
[bash: sed] sed에서 영역 구분을 이용한 문자열 재구성 작업 (역슬래시-괄호) (0) | 2023.07.19 |
[bash: curl] ftp 접속에서 여러 서버 또는 여러 파일에 대한 업로드 자동화 (0) | 2023.07.19 |