bash script2023. 8. 23. 13:43

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/605973

awk에서 -F 옵션을 이용해서 필드 구분자(field separator)를 지정할 수 있다. 일단 관련 내용은 이전 게시물을 참고하자.

[bash: awk] 특정 위치(field)에 대한 문자열 검색

 

[bash: awk] 여러 종류의 단어 구분자를 지정해서 단어 선택하기

 

알파벳이나 수자 등을 필드 구분자로 사용할 때는 크게 문제가 없는데, 만약 특수문자(|, ] 등)가 구분자에 포함되어 있을 경우에는 문제가 좀 달라질 수 있다. 아래의 예시를 보자.

# example.txt 파일 내용 확인
cat example.txt
john||123-456
jane||111-222

# example.txt에서 두번째 필드 출력(오동작)
awk -F '||' '{ print $2 }' example.txt

위와 같이 하면 결과가 제대로 나오지 않는다. 역슬래시(\)를 이용해서 다시 한번 시도해 보면

# 역슬래시 하나 사용(오동작)
awk -F '\|\|' '{ print $2 }' example.txt
awk: warning: escape sequence `\|' treated as plain `|'

역시 결과가 제대로 나오지 않는다. 아마도 셸에서 역슬래시를 한번 처리하고 awk에서 한번 더 처리하게 되는 모양이다. 역슬래시를 하나 더 추가하면

# 역슬래시 두개 사용(정상동작)
awk -F '\\|\\|' '{ print $2 }' example.txt
123-456
111-222

결과가 정상적으로 잘 나온다.

awk 에서 -F 옵션을 사용할 때 구분자에 특수한 문자가 포함되어 있다면, 작은 예시를 하나 만들어서 정상동작 여부를 미리 확인해 보는 것이 좋겠다. 역슬래시를 두개나 써야 하는 경우도 생길 수 있다는 점에 유의.

 

728x90
Posted by 반달가면