문서에서 줄을 세는 방법?


1076

나는 이와 같은 줄을 가지고 있으며 실제로 몇 줄이 있는지 알고 싶습니다 ...

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

리눅스 명령을 사용하여 모두를 계산하는 방법이 있습니까?


4
vim을 사용하여 파일을 연 다음을 입력하십시오 g <Ctrl-g>. 줄, 단어, 열 및 바이트 수를 표시합니다.
Luv33preet

30
@ Luv33preet 그러면 vim을 빠져 나가는 방법을 찾아 다니면서 자신을 다시 찾게됩니다
Skylar Ittner

5
@SkylarIttner 그리고 vim을 종료하는 방법을 찾아야한다면 <esc> :q!, 유일한 대답입니다. (이것은 농담입니다. 이것은 저장되지 않은 모든 변경 사항을 삭제합니다. vim을 알지 못하면 파일을 엉망으로 만들면 파일을 저장하지 않는 것이 좋습니다.)
Ryan

답변:


2030

사용 wc:

wc -l <filename>

이것은 라인 수를 출력합니다 <filename>:

$ wc -l /dir/file.txt
3272485 /dir/file.txt

또는 <filename>결과 사용에서 를 생략 하려면 wc -l < <filename>:

$ wc -l < /dir/file.txt
3272485

데이터를 파이프 할 수도 wc있습니다.

$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63

18
대단해 !! awk를 사용하여 다음과 같이 줄 번호에 추가 된 파일 이름을 제거 할 수 있습니다.wc -l <file> | awk '{print $1}
CheeHow

80
더 짧아도 가능합니다wc -l < <filename>
Tensigh

5
@ GGB667 @ baptx 다음을 사용하여 파일 이름을 제거 할 수도 있습니다.cat <file> | wc -l
baptx

14
와 함께 watch wc -l <filename>사용하면 실시간으로이 파일을 따를 수 있습니다. 예를 들어 로그 파일에 유용합니다.
DarkSide

27
wc -l은 "줄 바꿈"을 계산합니다. 두 줄의 텍스트와 그 사이에 하나의 "줄 바꾸기"기호가있는 파일이 있으면 wc는 "2"대신 "1"을 출력합니다.
Konstantin

140

모든 줄을 계산하려면 다음을 사용하십시오.

$ wc -l file

패턴이있는 줄만 필터링하고 계산하려면 다음을 사용하십시오.

$ grep -w "pattern" -c file  

또는 -v를 사용하여 일치를 반전시킵니다.

$ grep -w "pattern" -c -v file 

grep 매뉴얼 페이지에서 -e, -i 및 -x args를 살펴보십시오 ...


이상하게도 때로는 grep -c더 잘 작동합니다. 주로 때문에 wc -l짜증나는 "기능"패딩 공간 접두사.
MarkHu


43

많은 방법이 있습니다. 사용하는 wc것이 하나입니다.

wc -l file

다른 포함

awk 'END{print NR}' file

sed -n '$=' file (GNU sed)

grep -c ".*" file

3
예, 그러나 wc -l file줄 수와 파일 이름을 제공하여 파일 이름을 얻을 수 있습니다.filename.wc -l < /filepath/filename.ext
ggb667

GNU grep -H 인수를 사용하면 파일 이름과 개수가 반환됩니다. grep -Hc ".*" file
Zlemini

wc -l파일의 실제 줄이 아닌 개행 문자를 계산 하기 때문에이 솔루션에 투표했습니다 . 이 답변에 포함 된 다른 모든 명령은 줄이 필요한 경우 올바른 번호를 제공합니다.
growlingchaos

27

이 도구 wc는 UNIX 및 UNIX 유사 운영 체제에서 "단어 카운터"이지만 -l옵션 을 추가하여 파일의 행을 계산하는 데 사용할 수도 있습니다 .

wc -l foo의 줄 수를 계산합니다 foo. 다음과 같은 프로그램에서 출력을 파이프 할 수도 있습니다 ls -l | wc -l. 현재 디렉토리에 몇 개의 파일이 있는지 (그리고 하나 더 있음) 알려줍니다.


3
ls -l | wc -l 실제로 전체 크기 줄에 대해 +1 디렉토리의 파일 수를 제공합니다. ls -ld * | wc -l올바른 수의 파일을 얻도록 할 수 있습니다.
Joshua Lawrence Austill

24

디렉토리에있는 모든 파일의 전체 줄을 확인하려면 find 및 wc를 사용할 수 있습니다.

find . -type f -exec wc -l {} +


15

원하는 것은 줄 수 (그리고 줄 수와 바보 같은 파일 이름이 아님) :

wc -l < /filepath/filename.ext

앞에서 언급했듯이 이것들도 효과가 있습니다 (그러나 다른 이유로 열등합니다).

awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c ".*" file              # overkill and probably also slower

3
이 답변은 질문이 제기 된 후 3 년 후에 게시되었으며 다른 답변을 복사하는 중입니다. 첫 번째 부분은 사소한 것이고 두 번째 부분은 모든 고스트 독의 답변 이 추가되었습니다. 다운 보팅.
fedorqui 'SO 중지 피해'

4 년 동안. downvoting. 우리가 10 년 동안 긴 줄거리를 얻을 수 있는지 봅시다!
Damien Roche

1
아니, 넌 잘못 되었어; 고스트 독의 답변은 원래 질문에 대한 답변이 아닙니다. 줄 수와 파일 이름을 제공합니다. 파일 이름 만 얻으려면 filename.wc -l </filepath/filename.ext를 수행하십시오. 그래서 대답을 게시했습니다. awk, sed 및 grep은 모두이 작업을 수행하는 약간 열등한 방법입니다. 올바른 방법은 내가 열거 한 방법입니다.
ggb667

8

다음 nl과 같이 사용하십시오 .

nl filename

보낸 사람 man nl:

줄 번호가 추가 된 각 FILE을 표준 출력에 씁니다. FILE이 없거나 FILE이-인 경우 표준 입력을 읽으십시오.


이것은 내가 찾은 첫 번째 대답으로 줄 바꿈으로 끝나지 않는 한 줄의 텍스트가있는 파일에서 작동 wc -l하며 0으로 표시됩니다. 감사합니다.
Scott Joudry

7

나는 이것을 사용했다 :

cat myfile.txt | wc -l

파일 이름을 인쇄하지 않기 때문에 허용 된 답변보다 선호합니다 awk. 따라서 수정할 필요가 없습니다 . 허용되는 답변 :

wc -l myfile.txt

그러나 가장 좋은 것은 GGB667의 대답이라고 생각합니다.

wc -l < myfile.txt

나는 아마 지금부터 그것을 사용할 것입니다. 내 길보다 약간 짧습니다. 나는 누군가가 그것을 선호하는 경우를 대비하여 나의 오래된 방법을 내놓고 있습니다. 출력은이 두 가지 방법과 동일합니다.


3
첫 번째 방법과 마지막 방법은 동일합니다. 마지막 프로세스는 추가 프로세스를 생성하지 않기 때문에 더 좋습니다

5

위는 선호되는 방법이지만 "cat"명령도 도움이 될 수 있습니다.

cat -n <filename>

줄 번호와 함께 파일의 전체 내용을 보여줍니다.


5

여러 파일 줄을 계산하는 방법을 찾고있는 동안이 질문을 보았습니다. 따라서 .txt 파일의 여러 줄을 계산하려면이 작업을 수행 할 수 있습니다.

cat *.txt | wc -l

또한 하나의 .txt 파일에서 실행됩니다.)


5

wc -l 줄을 세지 않습니다.

예,이 답변은 파티에 약간 늦을 수 있지만 아직 답변에 더 강력한 솔루션을 문서화 한 사람은 없습니다.

대중적인 생각과는 달리 POSIX는 파일이 개행 문자로 끝나지 않아도됩니다. 예, POSIX 3.206 라인 의 정의는 다음과 같습니다.

0 개 이상의 <newline> 문자와 종료 문자의 순서.

그러나 많은 사람들이 인식하지 못하는 것은 POSIX가 POSIX 3.195 불완전한 라인 을 다음과 같이 정의한다는 것입니다.

파일 끝에서 하나 이상의 <newline> 문자 시퀀스.

따라서 후행 LF이 없는 파일 은 POSIX와 완벽하게 호환됩니다.

두 가지 EOF 유형을 모두 지원하지 않기로 선택한 경우 프로그램이 POSIX 호환이 아닙니다.

예를 들어 다음 파일을 살펴 보겠습니다.

1 This is the first line.
2 This is the second line.

EOF에 관계없이 두 줄이 있음에 동의합니다. 종료 된 행 수를 보지 않고 시작된 행 수를 보아서 알았습니다. 다시 말해 POSIX에 따라이 두 파일은 모두 같은 줄을 갖습니다.

1 This is the first line.\n
2 This is the second line.\n
1 This is the first line.\n
2 This is the second line.

매뉴얼 페이지는 wc개행을 계산하는 것에 대해 비교적 명확 하며 개행은 문자 일뿐입니다 0x0a.

NAME
       wc - print newline, word, and byte counts for each file

따라서 wc"라인"이라고 부르는 것을 세려고 시도조차하지 않습니다. 사용하여 wc라인을 계산하는 것은 매우 잘 입력 파일의 EOF에 따라 miscounts로 이어질 수 있습니다.

POSIX 호환 솔루션

위의 예와 같이 grep 을 계산 하는 데 사용할 수 있습니다 . 이 솔루션은보다 강력하고 정확하며 파일의 한 줄이 될 수있는 다양한 특성을 모두 지원합니다.

$ grep -c ^ FILE

4
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+': 숫자 반환합니다 .


3

wc -l다음과 같이 파일의 출력을 리디렉션 / 파이핑하면 충분합니다.

cat /etc/fstab | wc -l

그런 다음 아니오를 제공합니다. 줄만.


3

또는 파일 이름 패턴으로 하위 디렉토리의 모든 행을 계산하십시오 (예 : 파일 이름에 타임 스탬프가있는 로그 파일).

wc -l ./**/*_SuccessLog.csv

2

나는 이것이 오래 되었지만 여전히 알고 있다 : 필터링 된 라인 수

내 파일은 다음과 같습니다

Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error

전송 된 파일 수를 알고 싶은 경우 OK :

grep "OK" <filename> | wc -l

또는

grep -c "OK" filename

2

줄 수를 세고 변수에 결과를 저장하면 다음 명령을 사용합니다.

count=$(wc -l < file.txt) echo "Number of lines: $count"


1

다른 사람들 wc -l이 최선의 해결책 이라고 말 했지만 나중에 참조하기 위해 Perl을 사용할 수 있습니다.

perl -lne 'END { print $. }'

$.줄 번호를 포함하며 END블록은 스크립트 끝에서 실행됩니다.


1
작동하지 않습니다 :dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
VeikkoW

1
@VeikkoW 저에게 효과적입니다. Windows를 사용하는 경우 다른 인용 규칙이 적용됩니다. 그러나 OP는 Linux / Bash에 대해 물었습니다.
tripleee

1
perl -lne '}{ print $. '동일합니다.
Tom Fenech 2016 년


1

wc -l <filename>

이것은 출력에 줄 수와 파일 이름을 줄 것입니다.

예 :

wc -l 24-11-2019-04-33-01-url_creator.log

산출

63 24-11-2019-04-33-01-url_creator.log

사용하다

wc -l <filename>|cut -d\ -f 1

출력에서 줄 수만 가져옵니다.

예 :

wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1

산출

63


허용 된 (10 세) 답변을 반복하면 어떤 이점이 있습니까?
jeb

이 스레드에서 출력에서 ​​줄 번호 만 가져 오는 명령을 찾을 수 없기 때문에.
Harsh Sarohi

허용되는 답변의 두 번째 예입니다. wc -l < filename
jeb

wc -l <filename>은 파일 이름과 출력 행 수를 제공합니다.
Harsh Sarohi

아니요, wc -l < filename와 다릅니다 wc -l filename. 첫 번째는 리디렉션을 사용하고 user85509의 답변에
jeb

1

이 드롭 인 휴대용 쉘 기능 [ℹ]   은 매력처럼 작동합니다. .bashrc파일에 다음 스 니펫을 추가 하십시오 (또는 쉘 환경에 해당하는 코드 ) .

# ---------------------------------------------
#  Count lines in a file
#
#  @1 = path to file
#
#  EXAMPLE USAGE: `count_file_lines $HISTFILE`
# ---------------------------------------------
count_file_lines() {
    local subj=$(wc -l $1)
    subj="${subj//$1/}"
    echo ${subj//[[:space:]]}
}

이것은 bashzsh 외에도 모든 POSIX 호환 쉘 과 완전히 호환되어야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.