Хорошо. Итак, у нас есть сервер 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}'