텍스트 줄은 어떻게 계산합니까?


14

텍스트 파일에 몇 줄이 있는지 계산하는 방법 예 :

command file.txt

비어 있지 않은 줄 (공백과 탭을 계산하지 않는 줄) 만 계산하고 싶습니다.



4
질문은 잘 정의되어 있지 않습니다. 공백 (공백 및 TAB) 만있는 줄이 비어있는 것으로 간주됩니까?
Rmano

유권자 닫기 : OP의 의견 에 따라 @Rmano의 설명이 수정 된 후 질문이 수정되었습니다 . 따라서 Unclear로 닫히려면 투표하지 마십시오
αғsнιη

2
@KasiyA 아직도 불분명합니다. OP가 공백 (공백, 탭 등 \r)으로 sa 행을 계산 하거나 건너 뛰기를 원하는지 이해할 수 없습니다 . 현재는 공백이있는 모든 카운트 라인에 응답하고 빈 라인 만 건너 뜁니다.
terdon

@terdon OP DO가 NOT (빈 라인 (포함 빈 라인 계산하려는 \r\n), 선 -와 - 전용 탭과 라인 -와 - 전용 공간) 내가 생각하는 그들을 건너 뛸 및 응답되는 에 따라 내가 이해 한 것.
αғsнιη

답변:


11

위의 대답은 당신이 사용할 수, 올바른하지만 약간 다릅니다 grep쉽게 코드 등을 위해에grep -vc '^$' file.txt

예를 들어 (A) : file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$2

예를 들어 (B) : file.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$4

결과는 4입니다! 두 개만 기대하고 싶을 때 그러나 이것은 내용과 주석 사이의 탭을 계산합니다.

grep 또는 sed에 대한 자세한 내용 검색을 기억할 때 0에서 카운트와 1에서 grep과 다른 sed로 카운트합니다.


1
두 예제 모두 빈 줄을 세지 만 OP는 빈 줄을 세는 명령을 요청했습니다.
kos

2
실제로 나는 틀렸다, sed옵션은 실제로 정확하지만, 그렇지 grep않다
kos

부분적으로 만 정확하기 때문에 답을 downvoted했습니다. 수정했을 때 저에게 의견을 남겨 주시면 downvote를 제거 할 수 있습니다
kos

1
@ kos 나는 확실히 확실하다, 당신은 질문이 얼마나 모호한 지 알 수 있습니까?
amrx

2
@ kos, 당신은 처음부터 옳았습니다, 감사합니다. 나는 36 시간 이상 잤지 않았다, 나는 시간이 취침 시간을 추측한다!
amrx

12

시도 sed:

sed '/^$/d' file.txt | wc -l

공백이나 탭만 포함 된 행이 있고 카운트에서 무시하거나 무시하려는 경우 :

sed '/^[[:blank:]]*$/d' file.txt | wc -l

3
^\s*$탭이나 공백 만 포함하는 줄을 고려하는데도 사용 합니다.
Sylvain Pineau

@SylvainPineau : 추가됨.
heemayl

1
OP의 질문에서 명확하지는 않지만 공백 / 탭이있는 텍스트는 예상 결과 +1을 변경할 수 있습니다.
Sylvain Pineau

3

사용 grep:

grep -vc '^$' file  # or
grep -vc '^\s*$' file    

3

당신이 사용할 수있는:

grep -cve '^\s*$' file.txt

이를위한 명령이 필요한 경우 다음 줄을 붙여넣고 .bashrc셸 세션을 다시 시작하거나 새 터미널을 엽니 다.

count_lines()
{
    grep -cve '^\s*$' $1
}

예:

count_lines file.txt
42

2

:

awk 'NF{++count} END{print count}' file

설명:

NF따라서 전체 필드의 수,이 인쇄 나타냅니다 만이 아닌 빈 줄을 비 빈 줄에 있기 때문에, NF보다 큰 0true로하고 평가합니다. 따라서 awk가 공백이 아닌 행을 발견 하면 count 플래그를 늘리고 끝에 count 플래그 의 최신 값을 인쇄 하십시오 .END{print count}


1

편집 : 모든 것을 파이핑 c하는 grep대신 옵션을 추가 할 수 있습니다 wc.보다 컴팩트 한 버전은 @muru의 답변을 참조하십시오


grep:

grep -v '^$' file.txt | wc -l

0

펄 솔루션

펄은 그렇게 할 수 있습니다. 일반적으로 카운팅 라인은 다음과 같이 작동합니다.

$ perl -ne 'END{print $.}' input.txt                                                                                     

빈 줄을 모두 제외하려면 다음과 같이하십시오.

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

다음과 같은 입력 파일이 있다고 가정 해 봅시다.

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

총 5 줄, 2 줄의 빈 줄이 있습니다. 우리가 출력 한 명령은 다음과 같습니다.

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3

다중 파일 개선

이것은 단일 파일에 적합합니다. 여러 파일에서 작동하게하려면 다음과 같이 할 수 있습니다.

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.