반달가면 이글루에서 백업 - 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 옵션을 사용할 때 구분자에 특수한 문자가 포함되어 있다면, 작은 예시를 하나 만들어서 정상동작 여부를 미리 확인해 보는 것이 좋겠다. 역슬래시를 두개나 써야 하는 경우도 생길 수 있다는 점에 유의.
'bash script' 카테고리의 다른 글
[bash: sed] 16진수값(hex) 대체하기 (0) | 2023.08.23 |
---|---|
[bash: if, grep] 특정 문자열의 존재유무에 따른 작업 지정하기 (0) | 2023.08.23 |
[bash: sync] 계속 파일 구성이 변하는 디렉토리에 대한 작업에 대한 문제 (0) | 2023.08.22 |
[bash: function] 함수의 반환값을 변수에 할당할 때 유의할 점 (0) | 2023.08.22 |
[bash: wc] 파일 내용이 몇개의 행으로 이루어졌는지 확인하기 (0) | 2023.08.22 |