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)를 하도록 ">>" 기호를 사용한다.
하나의 파일에 대해 작업한 결과를 여러개의 파일에 분류하여 저장할 수 있어서 매우 편리하다.
'bash script' 카테고리의 다른 글
[bash: awk] awk에서 특수문자 검색하기 (1) | 2024.12.09 |
---|---|
[bash: awk] awk에서 파일명 출력 (0) | 2024.11.23 |
[bash:sed] 특정 개수의 문자열만 대체하기(예를 들면 처음 2개 문자열) (0) | 2024.08.05 |
[bash: awk] 특정 위치의 문자열 또는 문장(행 전체)의 길이 확인 (0) | 2024.07.31 |
[bash: date] 리눅스 date 명령으로 이메일 헤더 형식 시간 출력 (0) | 2024.05.16 |