wc -l 명령의 출력 합계를 통계합니다.

wc -l 명령의 출력 합계를 통계합니다.

다음과 같은 작업 공간 트리가 있습니다.

/Directory
  /Dir1/file1, file2
  /Dir2/file3, file4
  /Dir3/file5, file6
...

dir에 있는 각 파일의 줄 수의 합을 계산하고 싶습니다.

이 스크립트가 있지만 합계가 아닌 파일당 줄 수만 계산합니다.

#!/bin/bash

find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
  printf "%-25.25s : " "$dir"
  find "$dir" -type f | while read file; do
      linecount= cat $file | wc -l 
      echo "this file contains $linecount lnes"
  done 
done

답변1

내 솔루션은 다음과 같습니다

for d in */; do
    echo -n "$d : "
    sum=0
    for f in "$d"/*; do
        if [ -f "$f" ] ; then
            lines=$(wc -l "$f")
            sum=$((sum+lines))
        fi
    done
    echo $sum
done

어쩌면 초보자가 이해하기 더 쉬울 수도 있습니다.

답변2

통화 횟수를 최소화하세요 wc.

find /Directory -type d -print0 | while read -d '' dir; do
    echo -n "$dir: "
    find "$dir" -type f -exec wc -l {} + | sed -n 's/\([0-9]\{1,\}\) total/\1/p' | paste -sd+ | bc
done

관련 정보