사람이 읽을 수 있는 형식으로 디렉터리에 있는 각 파일의 줄 수를 나열하는 방법입니다.

사람이 읽을 수 있는 형식으로 디렉터리에 있는 각 파일의 줄 수를 나열하는 방법입니다.

큰 csv 파일이 포함된 디렉터리 및 하위 디렉터리 목록이 있습니다. 이 파일에는 약 5억 줄이 있으며 각 줄은 레코드입니다. 나는 알고 싶다

  1. 각 파일에는 몇 줄이 있습니까?
  2. 디렉토리에 몇 줄이 있습니까?
  3. 총 몇 줄인가요?

가장 중요한 것은 "사람이 읽을 수 있는 형식"이 필요하다는 것입니다. 12345678 대신 12,345,678

3가지 방법으로 이를 수행하는 방법을 배우는 것이 좋을 것입니다. 일반적인 bash 도구, awk 등 및 Perl(또는 Python).

답변1

각 파일에는 몇 줄이 있습니까?

원래 사용된 은 wc단어 수를 계산하는 것이었지만 줄, 단어, 문자, 바이트 및 가장 긴 줄 길이를 계산할 수 있습니다. 이 -l옵션은 행 수를 계산하도록 지시합니다.

wc -l <filename>

그러면 다음의 행 수가 출력됩니다.

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

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

$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63

디렉토리에 몇 줄이 있습니까?

노력하다:

find . -name '*.pl' | xargs wc -l

또 다른 문장:

( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l

그런데 wc이 명령은 줄 수가 아닌 새로운 코드 줄을 계산합니다. 파일의 마지막 줄이 새로운 코드 줄로 끝나지 않으면 계산되지 않습니다.

grep -c ^ , 전체 예를 사용할 수 있습니다.

#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
     #you see use grep instead wc ! for properly counting
     count=$(grep -c ^ < "$FILE")
     echo "$FILE has $count lines"
     let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED:  $total

총 몇 줄인가요?

귀하의 요청을 올바르게 이해했는지 잘 모르겠습니다. 예를 들어, 결과는 다음 형식으로 출력되어 각 파일의 줄 수를 표시합니다.

# wc -l `find /path/to/directory/ -type f`
 103 /dir/a.php
 378 /dir/b/c.xml
 132 /dir/d/e.xml
 613 total

또는 파일 없이 총 개행 수를 출력하려면 다음 명령을 파일별로 계산하는 것이 유용할 수 있습니다.

# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
 613

가장 중요한 것은 "사람이 읽을 수 있는 형식"이 필요하다는 것입니다. 12345678 대신 12,345,678

배쉬에는 하나가 있습니다인쇄 기능내장 기능:

printf "%0.2f\n" $T

언제나 그렇듯이 여기에 언급된 동일한 결과를 얻기 위한 다양한 방법이 있습니다.

답변2

wc대부분의 경우 명령과 와일드카드 의 조합으로 *충분할 수 있습니다.
모든 파일이 하나의 디렉터리에 있으면 다음을 호출할 수 있습니다.

wc -l src/*

여러 파일과 디렉터리를 나열할 수도 있습니다.

wc -l file.txt readme src/* include/*

이 명령은 파일 목록과 해당 줄 번호를 표시합니다.
마지막 줄은 모든 파일의 줄의 합계입니다.


디렉터리의 모든 파일을 재귀적으로 계산하려면 다음 안내를 따르세요.

먼저, .bash_profile 에 globstar를 추가하여 활성화하세요 shopt -s globstar. globstar를 지원하려면 Bash ≥ 4.x가 필요하며 brew install bash필요한 경우 설치할 수 있습니다. 를 사용하여 버전을 확인할 수 있습니다 bash --version.

그런 다음 다음을 실행하십시오.

wc -l **/*

globstar가 활성화되지 않은 경우 이 출력은 올바르지 않습니다.

답변3

이 명령은 각 디렉터리의 코드 줄 목록을 제공합니다.

find . -name '*.*' -type f | xargs wc -l

답변4

게임이 조금 늦었지만 디렉토리 크기로 인해 위의 매개변수 오류가 많이 발생합니다. 이것은 나에게 효과적입니다.

for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt

관련 정보