Учитывая список файлов в files.txt
, я могу получить список их размеров, как это:
cat files.txt | xargs ls -l | cut -c 23-30
который производит что-то вроде этого:
151552
319488
1536000
225280
Как я могу получить сумму всех этих чисел?
alias sum="paste -sd+ - | bc"
добавлено в завершение оболочки, спасибо товарищ. . .| x=$(echo <(cat)); echo $((0+${x// /+}+0))
если вы хотите, чтобы все время были bash:/usr/bin/sum
bc
недоступно в некоторых системах!awk
с другой стороны (я считаю) требуется для соответствия POSIX.Поехали
источник
cut
? Это предсказуемый номер столбца, так что используйте... | xargs ls -l | awk '{total = total + $5}{END{print total}'
total+=$1
вместоtotal = total + $1
Вместо использования cut, чтобы получить размер файла из вывода ls -l , вы можете использовать напрямую:
Awk интерпретирует «5 долларов» как пятый столбец. Это столбец из ls -l , в котором указан размер файла.
источник
cat не будет работать, если в именах файлов есть пробелы. Здесь вместо Perl однострочный.
источник
Или, если вы просто хотите сложить числа, отправьте:
источник
... | python -c'import sys; print(sum(int(x) for x in sys.stdin))'
когда Python 2 исчезнет в конце этого года.TMTWWTDI : Perl имеет оператор размера файла (-s)
источник
Весь ls -l и затем cut довольно сложны, когда у вас есть stat . Он также уязвим для точного формата ls -l (он не работал, пока я не изменил номера столбцов для cut )
Также исправлено бесполезное использование кота .
источник
<infile command
это так же, как (и в лучшем порядке, чем)command <infile
.если у вас не установлена bc, попробуйте
вместо того
$( )
<- вернуть значение выполнения команды$(( 1+2 ))
<- вернуть оцененные результатыecho
<- вывести его на экранисточник
Вы можете использовать следующий скрипт, если вы просто хотите использовать сценарии оболочки без awk или других интерпретаторов:
источник
Я бы вместо этого использовал "du".
Если вы просто хотите номер:
источник
files.txt
большой. Если количество переданных аргументовxargs
достигает определенного порогового значения, оно разбивается на несколько вызововdu
. Итоговое значение, отображаемое в конце, является итогом только для последнего вызоваdu
, а не всего списка.В кш:
источник
cut
, но вы игнорируете способность awks делать математику ...Труба, чтобы поглазеть:
источник
Вот мой
источник
источник
Я люблю использовать ....
они покажут сумму каждой строки ...
применяя над этой ситуацией:
Итого является последним значением ...
источник
Вы можете использовать awk, чтобы сделать то же самое, он пропускает не целые числа
или вы можете использовать команду ls и рассчитать удобочитаемый вывод
источник
awk '{ total += $1} END {print total}' files.txt
быстрееНа мой взгляд, самое простое решение для этого - команда «expr» unix:
источник
Чистая Баш
источник
Или вы можете просто сложить их, как вы читаете размеры
Если вы не заботитесь о размерах укуса и блоки в порядке, то просто
источник
Если у вас есть R, вы можете использовать:
Так как мне комфортно с R, у меня фактически есть несколько псевдонимов для таких вещей, поэтому я могу использовать их
bash
без необходимости запоминать этот синтаксис. Например:что я сделаю
Вдохновение: есть ли способ получить минимум, максимум, медиану и среднее из списка чисел в одной команде?
источник