linux 명려어 awk
특정패턴 문자열 처리하기.
$ awk
Linux 명령어 awk
텍스트 데이터를 처리하고 분석하기 위한 강력한 도구
1. 자세한 설명
awk
명령어는 Linux에서 텍스트 데이터를 분석하고 처리하는 데 사용되는 강력한 프로그래밍 도구입니다. 입력 데이터를 필드 단위로 처리하며, 조건에 따라 데이터를 출력하거나 수정할 수 있습니다. 주로 로그 파일 분석, 데이터 필터링, 서식 지정된 출력 생성에 사용됩니다.
2. 사용법
- 파일의 특정 필드 출력
awk '{ print $1 }' [파일 이름]
파일의 첫 번째 필드를 출력합니다. - 패턴에 맞는 데이터 처리
awk '/패턴/ { 명령 }' [파일 이름]
지정된 패턴에 일치하는 데이터를 처리합니다. - 변수와 조건 활용
awk '{ if ($1 > 10) print $2 }' [파일 이름]
조건에 따라 특정 필드를 출력합니다.
3. 자세하게 설명
awk
명령어는 데이터 처리를 위해 다음과 같은 주요 기능과 특징을 제공합니다:
- 필드 기반 처리: 공백 또는 지정된 구분자를 기준으로 데이터를 나누어 처리합니다.
- 조건 기반 출력: 특정 조건이 충족되는 경우 데이터의 일부를 출력할 수 있습니다.
- 내장 변수:
NR
(레코드 번호),NF
(필드 수),$0
(전체 레코드) 등을 통해 데이터를 효율적으로 처리할 수 있습니다. - 사용자 정의 함수: 복잡한 계산과 처리를 위한 사용자 정의 함수를 정의할 수 있습니다.
- 텍스트 변환: 텍스트 데이터의 형식을 조정하거나 재구성할 수 있습니다.
4. 자세한 명령어 사용법
다음은 awk
명령어의 다양한 사용 예제입니다:
# 파일의 첫 번째 필드 출력 $ awk '{ print $1 }' data.txt # 파일의 두 번째 필드 출력 $ awk '{ print $2 }' data.txt # 특정 패턴이 있는 줄 출력 $ awk '/ERROR/ { print $0 }' log.txt # 필드 간 구분자 변경 $ awk 'BEGIN { FS=","; OFS="|" } { print $1, $2 }' data.csv # 조건에 따른 데이터 출력 $ awk '{ if ($3 > 100) print $1, $2 }' data.txt # 레코드 번호와 함께 출력 $ awk '{ print NR, $0 }' data.txt # 필드 수 확인 $ awk '{ print NF }' data.txt # 필드와 레코드 길이 계산 $ awk '{ print $1, length($0) }' data.txt # BEGIN 및 END 블록 사용 $ awk 'BEGIN { print "시작" } { print $1 } END { print "끝" }' data.txt # 사용자 정의 함수 활용 $ awk 'function square(x) { return x * x } { print square($1) }' data.txt # 특정 조건으로 요약 $ awk '{ sum += $3 } END { print "합계:", sum }' data.txt # 특정 열 필터링하여 파일로 저장 $ awk '{ print $1, $3 }' data.txt > output.txt # 특정 구분자를 사용한 데이터 처리 $ awk -F"," '{ print $1, $2 }' data.csv # 로그 파일에서 특정 데이터 추출 $ awk '/200/ { print $0 }' access.log # 숫자의 합계 계산 $ awk '{ sum += $2 } END { print "총합:", sum }' numbers.txt # 실행 가능한 스크립트 생성 #!/bin/bash awk '{ print $1, $NF }' data.txt # 결과를 JSON으로 변환 $ awk '{ print "{ \"column1\": \"" $1 "\", \"column2\": \"" $2 "\" }" }' data.txt | jq # 반복문 내 사용 for file in *.txt; do awk '{ print $1, $2 }' $file >> combined_output.txt done
위의 예제는 awk
명령어를 사용하여 데이터를 처리하고 분석하는 다양한 방법을 보여줍니다.
No responses yet