일반 텍스트 파일에서 문자 발생 횟수


132

리눅스 / 터미널에서 문자 f가 일반 텍스트 파일에서 몇 번이나 나오는지를 세는 방법이 있습니까?


9
기술적으로 이것은 sh / bash / etc로 간주 될 수 있습니다. 프로그래밍 질문이므로 어느 곳에서나 유효하다고 생각합니다.
Rob Hruska

@Rob Hruska : 예, 또한 배쉬 프로그래밍이라고 생각합니다 ... @abrashka : 첫 번째 질문과 두 번째 질문에 대한 답은 "아니오"입니다!
cupakob

답변:


178

이건 어때요:

fgrep -o f <file> | wc -l

참고 : 기억 / 복제 및 사용자 정의가 훨씬 쉬우 며 Vereb의 답변보다 약 3 배 빠릅니다 (죄송합니다.


계산 \r이나 \n문자 가 필요한 경우 작동하지 않습니다 . 그 tr -cd f대답은 효과가 있습니다.
bjnord

3
예를 들어, 여러 문자를 계산하기 위해 a, b그리고 c, 사용 egrep: egrep -o 'a|b|c' <file> | wc -l.
Skippy le Grand Gourou

또한 대답 wc -c과 같이 사용하지 마십시오 tr. grep행별로 출력하면 행 wc끝이 문자로 계산되므로 문자 수가 두 배가됩니다.
Skippy le Grand Gourou

@bjnord 좋아요 \r,하지만 \n왜 사용하지 wc -l않습니까?
Skippy le Grand Gourou

67

훨씬 더 빠름 :

tr -cd f < file | wc -c

검색된 문자가 4.9MB 및 1100000 인 파일 이있는이 명령의 시간 :

real   0m0.089s
user   0m0.057s
sys    0m0.027s

Vereb 응답에 대한 시간과 echo, cat, trbc같은 파일 :

real   0m0.168s
user   0m0.059s
sys    0m0.115s

와 롭 Hruska 응답 시간 tr, sed그리고 wc같은 파일 :

real   0m0.465s
user   0m0.411s
sys    0m0.080s

와 Jefromi 응답 시간 fgrepwc같은 파일 :

real   0m0.522s
user   0m0.477s
sys    0m0.023s 

3
여러 문자, 예를 들어, 계산 a, bc: tr -cd abc < file | wc -l.
Skippy le Grand Gourou

확실합니까? tr -cd abc < file | wc -c대신 에 예상되지 않았습니다
Mithun B

10
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

여기서 A는 문자입니다

검색된 문자가 4.9MB 및 1100000 인 파일이있는이 명령의 시간 :

real   0m0.168s
user   0m0.059s
sys    0m0.115s

1
불필요한 cat을 제거하면 파일 이름이 wc및에 대한 인수로 제공되어 약 1/3 더 빠릅니다 tr.
Cascabel

1
정말로 최적화하려는 경우 파일을 한 번만 읽습니다. echo $ (stat -c % s <file>)-$ (cat <file> | tr -d 'A'| wc -c) | bc
Vereb

@Vereb-tr은 읽기만 stdin하지만 cated 대신 파이프 될 수 있습니다 .tr -d 'A' < <file> | wc ...
dsz

7

캐릭터를 포함하는 줄 수를 세는 것만으로도 충분합니다.

grep -c 'f' myfile

그러나 동일한 줄에서 여러 번 발생하는 'f'를 단일 일치로 계산합니다.


4

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

"A"두 문자를 문자로 바꾸고 "file"을 입력 파일로 바꿉니다.

  • tr -d '\n' < file: 줄 바꿈 제거
  • sed 's/A/A\n/g: "A"가 나타날 때마다 줄 바꿈을 추가합니다
  • wc -l: 줄 수를 센다

예:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.