Назад | Перейти на главную страницу

Однострочники командной строки: быстрый и грязный отчет «Передано байтов»

Хорошо. Итак, у нас есть сервер lighttpd, который загружает наши изображения.

Он регистрируется ежедневно, и мы рассматриваем возможность переноса всех этих изображений в нашу учетную запись S3 для увеличения времени загрузки, но прежде чем мы сможем это сделать, мне нужно хотя бы «почувствовать», как будет выглядеть наша передача.

Итак, прямо сейчас у нас есть стандартный журнал доступа lighttp

accesslog.filename = "/var/log/lighttpd/images.access_log" accesslog.format = "% h% V% u% t \"% r \ "%> s% b \"% {Referer} i \ "\ "% {User-Agent} i \" "

поэтому хочу выгрузить все «переданные байты» из этого файла журнала, красиво и легко.

кошка images.access_log | awk '{print $ 10}'

который выдает результат, подобный этому.

19547
6138
17782
8044
345
0
2727
2125
1838
1649
2127
3275
3653
0
16688

Теперь - я немного погуглил, и, возможно, я что-то забыл, есть ли где-то в Linux команда, которая возьмет весь этот вывод и просто сложит все это для меня? чтобы я мог запустить эту команду, и она просто выплевывала абсурдно большое количество каждый день, пока я не получу базовый уровень нашей пропускной способности за день?

--- РЕДАКТИРОВАТЬ ---

я нашел https://stackoverflow.com/questions/450799/linux-command-to-sum-integers-one-per-line

Есть ли способ заставить awk вернуть полное число вместо того, чтобы делать то, что показано ниже?

cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {print s}' 
9.48886e+10

Вы можете объединить их в одну команду. Если в 10-м столбце есть числа, то:

awk '{s+=$10} END {printf("%.d\n",s)}' images.access_log 

Пытаться cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {printf "%.f\n",s}'