LINUX.ORG.RU

Форматирование вывода vnstat

 


0

1

Доброго времени суток. В апплете МАТЕ command output хочу видеть количество потреблённого трафика. Раньше справлялся обычным awk, теперь решил чуть исправить вид.

Что хочу, что получилось:

~ vnstat -i enp3s0f5 --oneline
1;enp3s0f5;01/14/2018;164.21 MB;12.90 MB;177.11 MB;26.85 kbit/s;Jan '18;164.21 MB;12.90 MB;177.11 MB;1.27 kbit/s;164.21 MB;12.90 MB;177.11 MB
Вот так выглядит строка, которую нужно отформатировать. Интересуют 4-е и 5-е поле (если разбить с помощью ;), как хочу, чтобы оно выглядело: 164M/13M — т.е. округление и убрать букву B:
#!/bin/bash

function round_it(){
	count=${$1%.*}
	prefix=${$2%?}
	echo "$count$prefix"
}

IFACE=$(ip addr show | awk '/inet.*brd/{print $NF; exit}')
out=$(vnstat -i $IFACE --oneline)
IFS=';' array=($out)
down=${array[3]}
up=${array[4]}
echo $(round_it $down)
вот как написал, но не работает, жалуется на bad substitution, хотя в терминале если присвоить строку и разбить на массив — всё работает. Не пойму, где я накосячил.

Прошу помощи, заранее благодарен.

Ответ на: комментарий от micronekodesu

Так для чего тащить целый парсер, если тут разбирать всего ничего?

conformist ★★★
() автор топика
cat test
1;enp3s0f5;01/14/2018;164.21 MB;12.90 MB;177.11 MB;26.85 kbit/s;Jan '18;164.21 MB;12.90 MB;177.11 MB;1.27 kbit/s;164.21 MB;12.90 MB;177.11 MB
awk -F";" '{print $4, $5}' test | awk -F" " '{printf "%.0f%s/%.0f%s\n", $1, $2, $3, $4}'
164MB/13MB

На предмет универсальности нужно потестить.

Niroday
()
Ответ на: комментарий от Niroday

Спасибо! То, что нужно. Только подредактировал, чтобы В удалялось:

awk -F";" '{print $4, $5}' | awk -F" " '{gsub("B", ""); printf "%.0f%s/%.0f%s\n", $1, $2, $3, $4};')

conformist ★★★
() автор топика
Ответ на: комментарий от conformist

Фсё? Закрываем темы, господа!

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.