LINUX.ORG.RU
решено ФорумAdmin

Есть выхлоп счетчиков nftables, хотелось бы его привести в конкретный вид

 , ,


0

1

но в птичьих языках типа sed awk perl и тп я не силен, готового примера для моей задачи не нашел, возможно ли такое в принципе?

Счетчиков может быть много приведу пример лишь одного, для того чтоб распарсить и загнать счетчики в mariadb из этого

table ip filter {
        counter USER1_OUT {
                packets 38 bytes 11712
        }
        counter USER1_IN {
                packets 32 bytes 2208
        }
}

Хотелось бы получить, что то подобное

counter USER1_OUT { packets 38 bytes 11712 }
counter USER1_IN {  packets 32 bytes 2208 }

Хотелось бы имя счетчика и bytes получить в одной строке. Разными заменами подсмотренными в инете получается только все загнать в одну строку.

★★★★

Последнее исправление: alex_sim (всего исправлений: 1)
Ответ на: комментарий от vvn_black

И делай с json, что надо.

Увы json это еще более неизвестная мне штуковина

nft list table ip filter -j

в таком виде оно не сработало, но выхлоп json я смотрел, совсем не понимаю с какой сторону к нему можно подойти.

Но все равно спасибо, что откликнулись.

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

хотя вот что то нашел и скомбинировав получил

 nft -j list table ip filter |sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | grep -e FEDORA -e bytes

получил выхлоп

"name": "FEDORA_OUT"
 "bytes": 167568
 "name": "FEDORA_IN"
 "bytes": 23400]

Может из этого что то удастся извлечь

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

sed, awk и grep в одной строке. Сила!

Стыдно наверно, должно мне быть, а по существу!?!? как такое провернуть?

Форма номер 8, что нашел то и носим ;)!

alex_sim ★★★★
() автор топика
Последнее исправление: alex_sim (всего исправлений: 1)
Ответ на: комментарий от imb

https://stedolan.github.io/jq/ смотрели?

Нет конечно шаг к JSON, только что сделал

 nft -j list counters table ip filter |jq
{
  "nftables": [
    {
      "metainfo": {
        "version": "0.9.8",
        "release_name": "E.D.S.",
        "json_schema_version": 1
      }
    },
    {
      "counter": {
        "family": "ip",
        "name": "FEDORA_IN",
        "table": "filter",
        "handle": 5,
        "packets": 1521,
        "bytes": 4787705
      }
    },
    {
      "counter": {
        "family": "ip",
        "name": "FEDORA_OUT",
        "table": "filter",
        "handle": 6,
        "packets": 1669,
        "bytes": 315015
      }
    }
  ]
}

от чего ушол к тому и пришол :))))

 nft list counters table ip filter
table ip filter {
        counter FEDORA_IN {
                packets 1665 bytes 4802517
        }
        counter FEDORA_OUT {
                packets 1802 bytes 333187
        }
}

Очень похоже, а как поиметь пару Имя счетчика- байты в одной строке, чтоб распарсить готовым 20 летним скриптом, так и не понятно.

Поизучаю спасибо.

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

Сам использую jq не для форматирования JSON второй раз:

$ jq -r '.nftables[] | select(.counter) | .counter | "\(.name) \(.bytes)"'

Мощная штука.

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

Вот спасибо за примерчик, а то вроде понятно, что дергать, но с этим пьтичьим языком….

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