큰 csv 파일이 포함된 디렉터리 및 하위 디렉터리 목록이 있습니다. 이 파일에는 약 5억 줄이 있으며 각 줄은 레코드입니다. 나는 알고 싶다
- 각 파일에는 몇 줄이 있습니까?
- 디렉토리에 몇 줄이 있습니까?
- 총 몇 줄인가요?
가장 중요한 것은 "사람이 읽을 수 있는 형식"이 필요하다는 것입니다. 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