인수로 전달된 모든 텍스트 파일의 총 줄 수를 출력하는 스크립트

인수로 전달된 모든 텍스트 파일의 총 줄 수를 출력하는 스크립트

그래서 저는 텍스트 파일의 인수를 받아들이고 해당 파일의 총 줄 수를 출력하는 스크립트를 작성하고 있습니다. 예를 들어 내가 이렇게 말하면

./myScript file1 file2 file3

그것은 인쇄됩니다

10 total

(이 세 파일의 모든 줄의 합은 10이라고 가정합니다.)

나는 모든 주장을 검토하는 방법을 알고 있습니다. 나는 또한 파일의 줄 수를 얻으려면 다음과 같이 말할 것임을 알고 있습니다.

wc -l < fileName

그러나 이것을 일종의 누적 합계에 추가할 수 있는 "int"로 어떻게 바꿀 수 있습니까?

답변1

cat간단히 파이프를 사용하여 목표를 달성할 수 있습니다 .

cat "$@" | wc -l

정말로 수동으로 합계를 계산하려면 awk를 사용하면 됩니다.

for f in "$@"; do 
    wc -l < "$f"
done | awk '{ sum+=$1 } END { print sum }'

또는 마지막 줄을 구문 분석하려면 wc"total" 문자열을 제거하세요.

wc -l "$@" | awk 'END { print $1 }'

답변2

Jordan의 답변을 바탕으로 :

1. 단일 인스턴스를 통해 모든 데이터 전송wc -l

    if["$#"-gt 0]
    그 다음에
        고양이——“$@”|화장실-l
    기타
        에코 0
    필리핀 제도
    
    또는
     
    고양이 - /dev/null "$@" 화장실 -l |
    
  • -- "$@"다음으로 시작하는 파일 이름을 방지 하는 데 사용됩니다 .-.
  • 인수 없이 호출 하지 마세요 cat. 이렇게 하면 표준 입력을 읽게 됩니다.
  • 이것은 끔찍한의 고전적인 형태라는 점에 유의하십시오.cat a_single_file | something고양이의 쓸모없는 사용, 하지만 괜찮습니다(아직 이상적이지는 않지만).cat one_or_more_file(s) | something

wc2. "total" 라인이 방출된다는 사실에 의존

    if["$#"-gt 0]
    그 다음에
        wc -l -- /dev/null "$@" | wc -l -- /dev/null "$@" |
    기타
        에코 총 0개
    필리핀 제도
    
    또는
     
    wc -l -- /dev/null /dev/null "$@" | wc -l -- /dev/null /dev/null "$@" |
    
  • wc이 줄은 파일 이름 인수가 두 개 이상 있는 경우에만 내보내집니다 .total

3. 사용 awk하지 않고 사용wc

    if["$#"-gt 0]
    그 다음에
        awk 'END {NR 인쇄}' -- "$@"
    기타
        에코 0
    필리핀 제도
    
    또는
     
    awk 'END {print NR}' -- /dev/null "$@"
    

경고하다:

위의 명령은 파일 중 개행 문자가 아닌 문자로 끝나는 경우 모두 동일한 응답을 생성하지 않습니다.

답변3

sed -ne\$= files...

sed대신 원하는 수의 파일 이름을 제공하십시오 .files...그리고 모든 내용을 읽었으면 =입력의 마지막 줄 번호를 보고합니다.$

관련 정보