AWK는 다양한 내장 함수와 변수를 제공하며, 이를 활용하여 텍스트 파일을 처리할 수 있습니다.

아래는 AWK의 주요 내장 함수와 변수와 그 사용법에 대한 설명입니다.

1. 내장 변수

  • NF: 현재 라인의 필드 수를 나타냅니다. 예시: NF == 3 {print $1}
  • NR: 현재 라인의 번호를 나타냅니다. 예시: NR == 10 {print $0}
  • FS: 필드 구분자를 설정합니다. 예시: BEGIN {FS=","}
  • RS: 레코드(라인) 구분자를 설정합니다. 예시: BEGIN {RS=":"}

 2. 내장함수 

  • length: 문자열의 길이를 반환합니다. 예시: length($1)
  • substr: 문자열의 일부분을 추출합니다. 예시: substr($1, 1, 3)
  • split: 문자열을 구분자를 기준으로 나누어 배열로 반환합니다. 예시: split($1, arr, ":")
  • index: 문자열에서 특정 문자열의 위치를 반환합니다. 예시: index($1, "abc")
  • match: 문자열에서 정규식 패턴과 일치하는 첫번째 위치를 반환합니다. 예시: match($1, /[0-9]+/)

간단하게 아래와 같은 file.txt 파일이 있다고 할 때

apple,banana,orange
grape,kiwi,melon

첫번째 필드의 길이는 다음과 같은 스크립트로 출력할 수 있다. 

awk -F, '{print length($1)}' file.txt

 

로그 파일과 같은 텍스트 파일에서 특정 숫자의 빈도를 출력하는 예제를 알아 보면 다음 과 같다.

아래와 같은 파일이 주어진다면

123,456,789
234,567,890
345,678,901
456,789,012

다음  awk 스크립트로 각 숫자의 빈도를 출력한다. 

grep -o '[0-9]*' file.txt | awk '{for(i=1;i<=NF;i++) {if($i!="") count[$i]++}} END {for(num in count) {print num, count[num]}}'

1. grep -o '[0-9]*' file.txt: 정규식 [0-9]*를 이용하여 파일에서 숫자만 추출합니다.

2. awk '{for(i=1;i<=NF;i++) {if($i!="") count[$i]++}} END {for(num in count) {print num, count[num]}}': awk를 이용하여 각 숫자별 빈도를 출력합니다.

(1) for(i=1;i<=NF;i++) {if($i!="") count[$i]++}: 각 라인에서 숫자를 추출하여 배열 count에 저장합니다.

(2) END {for(num in count) {print num, count[num]}}': 모든 라인을 처리한 후, 배열 count의 각 항목에 대해 숫자와 빈도를 출력합니다.

반응형

'아는 것이 힘 > LINUX' 카테고리의 다른 글

[Python] 텍스트 파일에서 공백 줄(blank line) 삭제하기  (0) 2023.07.10
[서버 관리]파일 개수 출력 명령문  (0) 2023.06.08
[Putty] 한글깨짐  (0) 2020.10.21
[Linux]RPM  (0) 2020.10.05
[Linux] RAID  (0) 2020.10.05

+ Recent posts