Добавить тысячи чисел, хранящихся во втором «столбце» в текстовых файлах? - PullRequest
2 голосов
/ 04 октября 2010

У меня есть файл с 400k + числами, каждое из которых содержит имя файла и его размер в отдельных строках, и мне нужно добавить их, чтобы получить общее количество.

См .: https://superuser.com/questions/195493/unix-recursive-directory-listing-with-full-pathname-of-file-and-filesize

filename1 size1
filename2 size2

Это не будет очень большое число ... <~ 50 000 000 </p>

Все они целые числа, без десятичных точек, ни одна из них> 120

Нужно сделать это в стандартной командной строке Linux. Я могу изменить скрипт, используемый для генерации этого вывода, который:

find full_path_to_your_directory -type f -printf '%p %s\n'

Ответы [ 3 ]

1 голос
/ 04 октября 2010
find . -type f -printf '%p %s\n'  | awk '{sum+=$NF}END{print sum}'

Если вы хотите использовать Perl,

find . -type f -printf '%p %s\n' | perl -ane '$sum+=$F[1];END{print "$sum\n"}'
0 голосов
/ 04 октября 2010

Так как вам не нужно имя файла для суммирования размеров:

find path -type f -printf '%s\n' | awk '{sum += $1} END {print sum}'
0 голосов
/ 04 октября 2010

Я получил это:

find . -type f -printf '%p %s\n' | perl -n -a -e '$sum+=$S[1]; print "$sum\n"'

, который отображает промежуточный итог.

find . -type f -printf '%p %s\n' | perl -n -a -e '$sum+=$F[1]; print "$sum\n"' | tail -n 1

просто покажет итог.

С awk он немного более компактен:

find . -type f -printf '%p %s\n' | awk '{ sum+=$2}; END { print sum}'
...