[linux] 유닉스 쉘에서 숫자 열을 더하십시오

의 파일 목록이 주어지면 다음 files.txt과 같이 크기 목록을 얻을 수 있습니다.

cat files.txt | xargs ls -l | cut -c 23-30

다음과 같은 것을 생성합니다 :

  151552
  319488
 1536000
  225280

그 숫자 의 합계 를 어떻게 구할 수 있습니까?



답변

... | paste -sd+ - | bc

내가 찾은 가장 짧은 것입니다 ( UNIX Command Line 블로그에서).

편집 :- @Dogbert와 @Owen 덕분에 이식성 에 대한 인수가 추가되었습니다 .


답변

간다

cat files.txt | xargs ls -l | cut -c 23-30 |
  awk '{total = total + $1}END{print total}'


답변

ls -l 출력에서 파일 크기를 가져 오기 위해 cut 을 사용하는 대신 직접 사용할 수 있습니다.

$ cat files.txt | xargs ls -l | awk '{total += $5} END {print "Total:", total, "bytes"}'

Awk는 “$ 5″를 다섯 번째 열로 해석합니다. 파일 크기를 제공하는 ls -l 의 열입니다 .


답변

파일 이름에 공백이 있으면 고양이가 작동하지 않습니다. 여기에 perl one-liner가 있습니다.

perl -nle 'chomp; $x+=(stat($_))[7]; END{print $x}' files.txt


답변

python3 -c"import os; print(sum(os.path.getsize(f) for f in open('files.txt').read().split()))"

또는 숫자를 합산하려면 다음으로 파이프하십시오.

python3 -c"import sys; print(sum(int(x) for x in sys.stdin))"


답변

TMTWWTDI : Perl에 파일 크기 연산자 (-s)가 있습니다

perl -lne '$t+=-s;END{print $t}' files.txt


답변

전체 ls -l 및 cut은 stat 가있을 때 다소 복잡합니다 . 또한 ls -l 의 정확한 형식에 취약합니다 ( cut 의 열 번호를 변경할 때까지 작동하지 않았습니다 )

또한 cat쓸모없는 사용을 수정했습니다 .

<files.txt  xargs stat -c %s | paste -sd+ - | bc