[맥 터미널 / Unix] 파일의 글자수, 단어수, 라인수 세기 | wc

맥의 터미널(Unix) 환경에서 텍스트 파일 안에 있는 글자, 단어, 문장의 수를 세는 방법에 관한 글입니다. 이 글은 터미널 환경에서 진행되는 내용만을 담고 있으며, GUI 환경에서 사용해볼 수 있는 스크립트 작성 등은 링크의 글을 참고하시기 바랍니다.

  • UPDATE 2019-03-11 : 이미지 및 문구 수정

wc 커맨드 설명

wc는 ‘word count’ 각 단어의 앞문자를 따서 사용되며 파일 내 글자, 라인수 등을 세어(카운트)주는 Unix 커맨드입니다. 실용적인 관련 내용만 담고자했기 때문에 모든 내용을 자세하게 기재하지는 않았습니다. 부족한 내용은 ‘man wc’ 커맨드 혹은 링크의 글을 참고하시기 바랍니다.

기본 문법 ▼

wc [option] [file]

많이 사용되는 옵션(플래그) ▼

  • -c : Byte 수 카운트
  • -m : Character 수 카운트
  • -l : new line(\n) 수 카운트
  • -w : 단어 수 카운트

내용을 쉽게 이해하기 위해 알고 있으면 좋은 커맨드 ▼

 

글자수 세기

예제 파일을 준비해서 wc 커맨드를 적용해보았습니다. 글자수는 ‘-m’ 옵션을 사용하시면 됩니다. 공백과 줄바꿈을 제외한 예시의 총 글자 개수21개입니다.

예시 1 ▼

  • 준비된 예시. (6개)
  • This (4개)
  • is an (4개)
  • example (7개)

공백 문자/줄바꿈 문자 포함 결과 ▼

공백 문자와 줄바꿈 문자(\n)를 포함하여 글을 세고자 하시면 ‘-m’ 옵션만 이용하시면 됩니다.

$ wc -m example4.txt
 26 example4.txt

공백 문자만 제거한 후의 결과 ▼

줄바꿈 문자는 포함하되 공백 문자만 제거하고자 하시면 ‘tr’ 커맨드를 파이프로 조합하시면 됩니다. ‘[:blank:]’는 공백 문자를 의미합니다.

$ cat example4.txt | tr -d [:blank:] | wc -m
 24

공백 문자/줄바꿈 문자 제거 후 결과 ▼

줄바꿈 문자와 공백 문자를 모두 제거하고 순수 알파벳 혹은 문자만 세는 방법입니다. 마찬가지로 ‘[:blank:]’와 ‘\n’를 통해 트리밍해주시면 됩니다.

$ cat example4.txt | tr -d [:blank:] | tr -d "\n" |wc -m
 21

 

단어수 세기

단어별로 띄워쓰기가 완벽하다면 ‘-w’ 옵션만 사용하셔도 충분합니다. 하지만 먄약, ‘,(쉼표)’ 등의 띄어쓰기가 잘못 표현되었다면 ‘-w’ 옵션만으로는 정확한 단어수를 확인하기 어렵습니다.

예시 2 ▼

  • 공백을 기준으로 한 단어수 : 5개 (준비된 / 예시 / 2 / This,is / an,example)
  • ,(쉼표)도 단어분리의 기준으로 적용한 단어수 : 7개 (준비된 / 예시 / 2 / This / is / an / example)

공백을 기준으로 단어수 결과 ▼

‘-w’ 옵션만 사용하시면 됩니다. 위에서 이미 언급드린대로 ‘This,is’는 하나의 단어로 처리되었고, ‘an,example’ 역시 마찬가지입니다.

$ wc -w example4.txt
 5 example4.txt

‘,(쉼표)’로 구분된 단어도 분리 ▼

‘,(쉼표)’ 역시 단어를 구분짓는 구분자 역할을 하게 하는 것입니다. 즉 ‘,’를 ‘ ‘로 대체하므로 인해 우리가 원하는 결과값을 얻어낼 수 있습니다. 결과적으로 총 7개의 단어가 예상대로 출력됩니다.

$cat example4.txt | tr "," " " | wc -w
 7

 

문장수 세기

문장의 수Line의 수는 완전히 다른 개념이기 때문에 단순히 ‘-l’ 옵션만 사용하셔서는 원하는 결과를 얻기 어려우실 수 있습니다. 문장의 수는 문장의 끝(‘.(마침표)’)으로 구분하는 반면 Line의 수는 개행문자(\n)로 구분합니다. 아래 예시로 설명드리면 첫줄의 ‘example.’과 ‘Period’ 사이에는 개행문자(\n)가 없습니다. 또한, ‘symbols’와 ‘indicate’ 사이는 개행문자(\n)로 줄바꿈이 일어난 것이 아닙니다.

예시 3 ▼

  • 문장의 수 : 3개
  • Line의 수 : 1개

‘\n’ Line 개수 결과 ▼

사용자의 목적이 Line의 수를 세는 것이라면 그냥 ‘-l’ 옵션을 붙여주시면 됩니다.

$ wc -l example4.txt
 1 example4.txt

총 문장수 결과 ▼

문장의 끝마침이 ‘.(마침표)’로 되어 있다는 전제하에 ‘grep’로 마침표만 뽑아 출력하시고 그 라인의 수를 ‘-l’로 세어주시면 됩니다. 마침표가 없는 문장은 문장으로 카운트하지 못합니다.

$ cat example4.txt | grep -o "\." | wc -l
 3

공백 라인을 제외한 라인수 ▼

아무 내용이 없는 공백 라인을 라인수에서 제외하는 방법입니다.

$cat example4.txt | sed '/^$/d'
This is an example. Period symbols indicate sentence's end.
The result has to be 3.

그리고 파이프로 ‘wc -l’를 이어주시면, 원하는 결과를 출력하실 수 있습니다.

$cat example4.txt | sed '/^$/d' | wc -l
 2

이상입니다.

참고

4 COMMENTS

댓글 남기기