개요
awk는 텍스트 파일을 행 단위로 읽어 들여, 각 행을 필드(field)로 분리한 후 지정된 규칙에 따라 처리하는 프로그래밍 언어입니다. `-F` 옵션은 이 필드를 분리하는 기준이 되는 구분자를 정의하며, 기본 구분자인 공백 문자 외에 쉼표, 콜론, 특정 문자열, 또는 정규 표현식 등 다양한 구분자를 사용할 수 있게 합니다.
주요 특징
- 사용자 정의 필드 구분자 지정
- 정규 표현식을 구분자로 사용 가능
- CSV, 로그 파일 등 구조화된 텍스트 데이터 처리
- 데이터 추출 및 변환 용이
주요 옵션
awk 명령어는 다양한 옵션을 제공하지만, 여기서는 필드 구분과 관련된 주요 옵션인 `-F`에 초점을 맞춥니다.
필드 구분
생성된 명령어:
명령어를 조합해 보세요.
설명:
`awk` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 예시
`-F` 옵션을 활용하여 다양한 형식의 텍스트 데이터를 처리하는 예시입니다.
쉼표(,)로 구분된 CSV 파일에서 특정 필드 출력
echo "apple,banana,cherry,date" > data.csv
awk -F',' '{print $1, $3}' data.csv
data.csv 파일에서 첫 번째와 세 번째 필드를 쉼표로 구분하여 출력합니다.
콜론(:)으로 구분된 /etc/passwd 파일에서 사용자 이름과 셸 출력
awk -F':' '{print $1, $7}' /etc/passwd
/etc/passwd 파일에서 사용자 이름(첫 번째 필드)과 로그인 셸(일곱 번째 필드)을 출력합니다.
여러 구분자(공백 또는 탭)를 정규 표현식으로 지정
echo "field1 field2\tfield3" > data.txt
awk -F'[ \t]+' '{print $1, $2}' data.txt
공백이나 탭 문자가 여러 개 연속되어도 하나의 구분자로 인식하여 첫 번째와 두 번째 필드를 출력합니다. (기본 동작과 유사)
특정 문자열을 구분자로 사용
echo "Header---Content Body---Footer" > multi_line_data.txt
awk -F'---' '{print $1, $2}' multi_line_data.txt
입력에서 '---' 문자열을 필드 구분자로 사용하여 첫 번째와 두 번째 필드를 출력합니다.
첫 번째 필드가 특정 값인 라인에서 세 번째 필드 출력
echo "root:x:0:0:root:/root:/bin/bash\nuser:x:1000:1000:user:/home/user:/bin/bash" > users.txt
awk -F':' '$1 == "root" {print $3}' users.txt
콜론으로 구분된 파일에서 첫 번째 필드가 'root'인 라인만 찾아 세 번째 필드를 출력합니다.
팁 & 주의사항
awk -F 사용 시 유용한 팁과 주의할 점입니다.
정규 표현식 구분자
`-F` 옵션에 전달되는 구분자는 정규 표현식으로 해석됩니다. 따라서 `.`이나 `*` 같은 특수 문자를 리터럴로 사용하려면 `\.` 또는 `\*`와 같이 이스케이프해야 합니다.
- 예: `awk -F'\.' '{print $1}' filename` (점(.)을 구분자로 사용)
- 예: `awk -F'[[:space:]]+' '{print $1}' filename` (모든 공백 문자를 구분자로 사용)
내부 변수 FS (Field Separator)
`-F` 옵션은 내부 변수 `FS`를 설정하는 것과 동일합니다. `BEGIN` 블록에서 `FS`를 설정하여 스크립트 내에서 구분자를 동적으로 제어할 수 있습니다.
- 예: `awk 'BEGIN {FS=","} {print $1}' data.csv`
출력 필드 구분자 (OFS)
입력 필드 구분자(`FS`)와 별개로, `OFS` (Output Field Separator) 변수를 설정하여 `print` 문으로 출력되는 필드들 사이의 구분자를 지정할 수 있습니다. 기본값은 공백입니다.
- 예: `awk -F',' 'BEGIN {OFS=":"} {print $1, $3}' data.csv` (출력 시 쉼표 대신 콜론 사용)