> 텍스트 처리 및 검색 > awk

awk -F: 필드 구분자 지정

awk는 강력한 텍스트 처리 도구로, 파일이나 스트림에서 특정 패턴을 찾아 처리하고 데이터를 조작하는 데 사용됩니다. 특히 `-F` 옵션은 입력 레코드의 필드를 구분하는 구분자(delimiter)를 지정하여, 복잡한 데이터 구조를 쉽게 파싱하고 원하는 필드만 추출하거나 조작할 수 있게 해줍니다. 이는 CSV, 로그 파일 등 다양한 형식의 데이터를 다룰 때 필수적인 기능입니다.

개요

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` (출력 시 쉼표 대신 콜론 사용)

동일 카테고리 명령어