bash script2023. 7. 19. 17:25

 

반달가면 이글루에서 백업 - 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 연산은 "||" 문자열을 사용한다.

728x90
Posted by 반달가면