Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Как получить значения всех ключей в Memcached

В комментариях к одной из статей на «Хабре» привели однострочник для командной строки, чтобы вывести содержимое всех ключего локального memcached, я его прямо там причесал, но подумал, что он может мне и самому в будущем пригодиться. Переношу сюда:

nc localhost 11211 <<<"stats items" | awk -F: '/STAT items:[0-9]+/{if (!a[$2]++) print $2}' |
xargs -I{} echo 'stats cachedump {} 100' | nc localhost 11211 | awk '/ITEM/{print $2}' | xargs -n1 echo get |
nc localhost 11211

Без использования awk

nc localhost 11211 <<<"stats items" | sed -n '/STAT/{s/[^:]*:\([^:]*\).*/stats cachedump \1 100/;p}' | sort -u |
nc localhost 11211 | sed -n '/ITEM/{s/[^ ]* \([^ ]*\) .*/get \1/;p}' | nc localhost 11211

Без использования awk и sed

nc localhost 11211 <<<"stats items" | grep -Po '(?<=STAT items:)\d+' | sort -u |
xargs -I. echo stats cachedump . 100 | nc localhost 11211 | grep -oP '(?<=ITEM )\S*' |
xargs -n1 echo get | nc localhost 11211
5 комментариев
Akademic (akademic.name) 2014

Без использования awk, это чисто спортивный интерес человека, написавшего шахматы на sed?
Или есть объективные причины усложнять?

Евгений Степанищев (bolknote.ru) 2014

Комментарий для akademic.name:

Ну, там попросили без awk, а sed у человека использовался. Кроме того, там ничего сложного нет вообще, две команды простые, одна из них — вывод в поток.

Chibiko 2015

А как это в переменную засунуть?

Евгений Степанищев (bolknote.ru) 2015

Комментарий для Chibiko:

VAR=$(…)

Евгений Степанищев (bolknote.ru) 2016

100 в коде (stats cachedump {} 100) — это ограничение по выдаваемой этой командой порцией ключей, чтобы отключить ограничение, надо поставить 0, но и в этом случае оно будет ограничено по размеру — ≈1—2 мегабайта.