bash script2024. 12. 26. 11:40

awk에서 뭔가 작업을 할 때, 조건에 따라 서로 다른 파일에 출력 결과를 저장할 수 있다. 일단 단순히 하나의 파일에 결과 전체를 저장하려면 아래의 예시처럼 할 수 있다.

# my_file.txt에서 문자열 "abc"가 있는 행을 찾아서 my_abc.txt에 저장
awk '$0~/abc/ { print $0 }' my_file.txt > my_abc.txt

위의 예시를 조금 변형해서, my_file.txt 내용중에 만약 "abc"가 있으면 해당 행을 my_abc.txt에 저장하고 "123"이 있으면 my_123.txt에 저장하고 싶으면 어떻게 해야 할까? 이럴 때는 I/O 리다이렉션(redirection)을 awk 스크립트 내부에서 해 주면 된다.

awk '{
  if ($0~/abc/) { print $0 >> "my_abc.txt" }
  else if ($0~/123/) { print $0 >> "my_123.txt" } }' my_file.txt

파일명은 변수가 아니므로 따옴표를 사용해야 한다는 점에 유의하자. 또한 결과를 계속 누적해야 하므로 리다이렉션을 할 때 덧붙이기(append)를 하도록 ">>" 기호를 사용한다.

하나의 파일에 대해 작업한 결과를 여러개의 파일에 분류하여 저장할 수 있어서 매우 편리하다.

 

728x90
Posted by 반달가면