본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스/유닉스/셸 프로그래밍] 파일 행 단어 등 총 개수를 출력해주는 wc 명령어

반응형

[ Linux / Unix / Shell programming 포스팅 목차 링크 모음 ] 

안녕하세요 여러분!

오늘은 명령어 wc에 대해서 알아보는 시간을 가집시다.ㅎㅎ

사실 요 아이도 대게 간단한 명령어예요. 바로 시작할까요?

명령어 문법과 대표 옵션

wc (word count)

$ wc [option] file

텍스트 파일의 행, 수, 단어, 문자 수를 출력해주는 명령어입니다.

 

가끔 내가 파일들을 개별 압축한 다음에, 총 몇개의 파일들이 압축되었는지 확인한다던가,

특정 단어가 해당 파일에 총 몇번 들어가있는지 등

여러모로 활용성이 높겠죠? ㅎㅎ

 

옵션 OPTION

wc의 옵션은 간단해서 좋아요! ㅎㅎ

옵션

의미

-l (--lines)

행 수만 출력합니다 

-w (--word)

단어 수만 출력합니다.

-c (--bytes)

문자 수만 출력합니다.

-L (--max-line-length)

가장 긴 라인의 길이를 출력합니다. 

어떤 옵션들이 있는지 봤겠다. 이제 예시들을 보러 고고 ~~

WC 사용 예제, 사용법

간단하게 wc써보기 - 개행문자

$ wc /etc/passwd

/etc/passwd 파일의 행, 단어, 문자의 수를 출력합니다

/etc/passwd라는 파일은 총 35행, 그리고 43단어, 총 문자수는 1781이네요 ㅎㅎ. 처음부터, 행수, 단어수, 문자 수 순으로 보여줍니다.

그런데~~

이렇게 hello blog밖에 들어있지 않은 wc_ex.txt에는 행 2개 단어 2개 총 글자가 11개로 나와요.

근데 실제로 글자수를 세어보면 9개 아닌가요? 왜 11개가 결과값으로 나왔을까요??

왜냐! wc는 개행문자까지 문자로 판단해 개수에 포함시키기 때문이예요

개행문자는 'cat -A' 명령어로 확인해볼 수가 있습니다.

뒤에 $가 붙었네요? 이 두 글자를 wc가 포함시켰기 때문에 11글자가 된 거~

참고로 엔터를 쳐서 빈 라인을 만들어도, 개행문자 때문에 wc의 행 수도 늘어나게 됩니다 ㅎㅎ

로그인 한 접속자 수 who, users와 -l -w 옵션

이번에는 옵션을 사용한 예제를 보기 위해서 접속사 수를 확인해보는 실습을 진행해볼게요

먼저~~ 로그인이 많이 되어 있는 환경을 만들기 위해

가상콘솔 2와 3으로 이동해서 다른 계정으로 각각 로그인해줍시다.

가상콘솔은, alt+F2, alt+F3으로 각각 이동할 수 있어요 ㅎㅎ

저의 경우에는 가상콘솔 2에는 ubuntu계정으로 로그인, 가상콘솔 3으로는 yang이라는 계정으로 로그인 해줬습니다.

아! 혹시 사용자 계정 추가하는 법을 모르시는 분은 이 포스팅을 참고하세요! ㅎㅎ 

 

[리눅스 / 유닉스]사용자 관리(사용자 추가 useradd, passwd파일, 시스템계정 )

리눅스 완전 정복 : 리눅스 목차 오늘도 제 블로그를 클릭해주시고 방문해주신 방문자님들 반갑습니다. 오늘은 관리자 역할 중 빼놓을 수 없는 사용자관리에 대해서 알아보는 시간을 가질거예요~! 사용자 계정 추..

jhnyang.tistory.com

로그인 접속자 수는, wc명령어와 users 명령어로 확인할 수 있습니다.

왜 ~~ 로그인 접속자 수 보는걸 예제로 들었냐~~

who나 w명령어는 행 기준으로 로그인 한 사람들이 나타나고 users는 띄어쓰기 즉 단어 기준으로 로그인 계정이 보이기 때문이죠 ㅎㅎ -l옵션과 -w옵션을 둘 다 활용해볼 수 있잖아요!

로그인 계정을 확인할 수 있는 명령어들

사실 로그인 계정을 확인하는 명령어로 'w'도 사용될 수 있지만, w는 앞에 콜럼 정보가 뜨기 때문에 행수로 추출했을 경우 로그인 계정 개수만 나오지는 않습니다 ㅎㅎ 앞에 두 행 때문에 로그인한 사용자가 3명이여도 결과는 5로 뜰거예요. 암튼 그래서 who와 users를 사용해서 비교해봅시다.

결과값이 입력으로 들어가야 하므로 파이프(|)를 사용해줍시다.

$ who | wc -l 
$ users | wc -w

현재 접속한 사람의 수를 표시합니다. 

잘 출력된 것을 확인할 수 있어요 !ㅎㅎ 3명이 접속중이다~

여러 파일들을 대상으로 wc하고 싶으면?

한 파일말고 여러 파일들 대상으로 개수를 세고 싶을 수도 있어요 ㅎ

wc 파일1 파일2 파일3

그때는 이렇게 뒤에 파일들을 여러개 붙여주면 끝!

결과가 집어넣은 파일 순서대로 행에 정보를 출력해줬어요.

특정 패턴을 갖는 파일들만 대상으로 하고 싶으면 아래처럼 해주면 되겠죠? ㅎㅎ

wc *log*

로그가 들어가는 파일들에 대한 개수 정보를 다 출력해달라는 명령어입니다.

특정 문자열을 포함하는 파일의 개수

이번에는 디렉터리에서 특정 문자열을 포함하는 파일이 총 몇 개의 파일이 있는지 알아볼게요 

일단 특정 문자열을 들어가는 파일을 찾아야해요 ㅎㅎ

ls *log*

이렇게 간단하게 ls로 할수도 있지만, 혹 다른 디렉터리에서 검색을 진행할 수도 있으니..

find . -name "*log*"

이렇게 디렉터리 위치를 지정해줄 수 있는 find 명령어를 사용할 수도 있겠죠?

결과값이 wc의 입력값으로 들어가야 하니 역시 파이프 (|)로 두 명령어를 이어줍시다.

log가 들어간 파일이 총 aaa.log, bbb.log, ccc.log인데 3개로 개수가 잘 출력된 것을 확인할 수 있어요.

 

파일에서 단어 개수 추출하기 - grep, wc

특정 단어가 총 몇 개 들어갔는지 궁금할 수 있어요

특정 단어만 뽑아주는 grep 명령어를 활용해서 특정 단어의 총 개수를 확인할 수 있답니다.

저번시간에 작성했던 cuttest.sh 파일을 활용해서 예시를 보여드릴게요

 

cuttest.sh

참고로 cuttest.sh 파일은 이와 같이 작성되어 있습니다. 'FORMAT'이라는 단어가 몇 번 들어갔는가?를 확인해보려고 한느데 총 4개가 들어가 있네요 

아마,, 여기까지 오신 분들이라면, 단어를 추출하는거니까

$ grep 'FORMAT' cuttest.sh | wc -w

여기까진 생각했을 거예요. 근데 이렇게 하면 17이 나오게 됩니다! grep 명령의 결과가 FORMAT이 들어간 3라인, 4라인, 5라인 전체를 출력해주기 때문에 3~5라인에서 단어의 수를 반환하거든요 

grep 결과값

따라서 지정된 패턴과 매칭하는 것만 출력해주는 -o옵션을 넣어줘야 합니다. grep -o의 결과가 저렇게 나오니, -l옵션을 사용하던 -w옵션을 사용하던 둘 다 원한느 결과를 얻을 수 있겠죠

$ grep -o 'FORMAT' cuttest.sh | wc -l 
$ grep -o 'FORMAT' cuttest.sh | wc -l

근데 만약 'FORMAT'이라는 문자열을 포함하는 단어가 아니라, FORMAT 단어 그 자체만을 뽑아서 보고 싶으면

단어 바운더리를 의미하는 '\b'를 양쪽에 붙여주면 됩니다.

또는 '\bFORMAT\b' 대신에 '\<FORMAT\>'를 사용해서 코드를 짜도 같은 의미입니다.

 

오늘은 대표적 몇가지 예시를 통해서 wc가 무엇인지, 어떻게 사용하는지에 대해서 알아봤어요.

광고보답, 댓글, 덧글 등은 포스팅을 작성하는데 힘이 됩니다.

항상 방문해주시는 여러분들 감사합니다. 다음 포스팅에서 뵐게요~!

 

반응형