Devin.KR
로그인

리눅스 wc 명령어 사용법 - 줄 수·단어 수·바이트 수 세기 실전 예제

개발자 조회 1

이 명령어를 언제 쓰는가

"에러가 몇 건이지", "이번 배치에서 몇 개나 처리됐지", "파일이 몇 개 걸렸지" 같은 질문에 답하는 명령이다. 파이프라인 끝에 | wc -l 을 붙여 결과 개수를 세는 것이 실무에서 압도적으로 많이 쓰는 형태다.

파일을 눈으로 보기 전에 규모부터 확인하는 용도로도 쓴다. 로그가 100줄인지 1억 줄인지 알아야 cat 을 쳐도 되는지 판단할 수 있다.

기본 형식

wc [옵션] 파일...

옵션 없이 쓰면 줄 수, 단어 수, 바이트 수를 순서대로 출력하고 파일명을 붙인다.

$ wc access.log
  120453  1806795 24310922 access.log

파일을 여러 개 주면 각 파일의 결과와 함께 마지막에 total 행이 붙는다. 파일명을 생략하면 표준 입력을 읽는다.

자주 쓰는 옵션

옵션의미예시
-l줄 수만 센다. 실무에서 90%는 이것이다wc -l app.log
-w단어 수를 센다 (공백으로 구분)wc -w README.md
-c바이트 수를 센다wc -c dump.sql
-m문자 수를 센다. 한글은 -c 와 값이 다르다wc -m korean.txt
-L가장 긴 줄의 길이를 알려준다wc -L access.log

실전 예제

1) 로그 파일의 전체 건수를 확인한다. 파일을 열기 전에 규모부터 본다.

wc -l /var/log/nginx/access.log

2) 오늘 발생한 에러 건수를 센다. grep 결과를 파이프로 넘기는 가장 흔한 조합이다.

grep '2026-08-25' /var/log/app/error.log | wc -l

다만 grep 만으로 셀 수 있으면 grep -c 가 더 빠르다. 파이프가 여러 단계일 때 wc 를 쓴다.

3) find 로 걸린 파일 개수를 센다. 삭제 전에 "몇 개나 지워지는지" 확인하는 안전 절차다.

find /backup -type f -name '*.sql.gz' -mtime +30 | wc -l

4) 중복 제거 전후를 비교한다. 데이터에 중복이 얼마나 섞였는지 한눈에 본다.

wc -l emails.txt
sort -u emails.txt | wc -l

5) 가장 긴 줄의 길이를 확인한다. DB 컬럼 길이를 정하거나 로그 한 줄이 비정상적으로 긴지 볼 때 쓴다.

wc -L /var/log/app/app.log

6) 한글 텍스트의 실제 글자 수를 센다. 바이트 수와 헷갈리면 안 되는 상황에서 쓴다.

wc -c -m notice.txt

UTF-8에서 한글 한 글자는 3바이트라 -c 값이 -m 의 약 세 배로 나온다. DB varchar 길이를 계산할 때 이 차이가 문제가 된다.

함정과 주의점

마지막 줄에 개행이 없으면 -l 값이 하나 적게 나온다. wc -l 은 "줄"이 아니라 개행 문자의 개수를 센다. 아래를 직접 확인해 보면 명확하다.

$ printf 'a\nb\nc' | wc -l
2

줄은 셋인데 결과는 2다. 애플리케이션이 만든 파일이나 API 응답을 저장한 파일에서 자주 발생한다. 건수가 하나씩 어긋나는 배치 대사 오류의 흔한 원인이므로, 정확한 레코드 수가 필요하면 grep -c '' 를 쓰거나 데이터 생성 쪽에서 개행을 보장한다.

ls | wc -l 로 파일 개수를 세면 틀린다. 두 가지 이유다. 첫째, ls 는 숨김 파일을 빼고 센다. 둘째, 파일명에 개행이 들어 있으면 한 파일이 두 줄로 계산된다. 정확히 세려면 이렇게 한다.

find . -maxdepth 1 -type f | wc -l

숨김 파일까지 포함하려면 ls -A | wc -l, 파일명에 개행이 있을 수 있는 환경이라면 find . -maxdepth 1 -type f -printf '.' | wc -c 처럼 센다. 다만 -printf 는 GNU find 전용이라 macOS 에서는 unknown primary 오류가 난다. 어디서나 도는 형태는 find . -maxdepth 1 -type f -print0 | tr -dc '\0' | wc -c 다.

파일명을 인자로 주면 결과에 파일명이 붙는다. 스크립트에서 숫자만 필요한데 COUNT=$(wc -l app.log) 로 받으면 120453 app.log 가 통째로 들어가 산술 비교가 깨진다. 파이프로 넘기면 파일명이 붙지 않는다.

COUNT=$(wc -l < app.log)

BSD/macOS 의 wc 는 여기에 더해 숫자 앞에 공백 패딩까지 붙인다. 리다이렉션으로 받은 뒤에도 값이 이상하면 tr -d ' ' 로 다듬는다.

함께 보면 좋은 명령어

  • grep -c — 조건에 맞는 줄만 셀 거라면 파이프 없이 이쪽이 빠르다.
  • uniq -c — 전체 건수가 아니라 값별 건수가 필요할 때 쓴다.
  • du — 줄 수가 아니라 디스크 용량이 궁금하면 wc -c 가 아니라 du 를 쓴다.