Следующее выглядит как неактивный LV:
root@orwell:/tmp# lvconvert --splitmirrors 1 --name debian_boot_copy /dev/newdebian/debian_boot
Unable to determine sync status of newdebian/debian_boot.
Unable to split newdebian/debian_boot while it is not in-sync.
Я проверил с 2.02.172, и это именно то, что я получил, когда LV был неактивен.
Разделение ветви разрешено только при синхронизации RAID. И LVM не может определить, синхронизировано ли устройство, пока оно не активно.
Сначала вы должны активировать устройство перед любыми попытками разрезать ногу:
lvchange -ay newdebian/debian_boot
И затем дождитесь синхронизации -в LVM нет команды опроса, чтобы сделать это, вам придется либо подождать некоторое время и проверить себя, либо написать скрипт.
ПРИМЕЧАНИЕ. :Может быть безопаснее использовать вывод dmsetup status
, так как для LVM версии 2.02.171 и старше может быть сообщено о 100% из-за округления, когда устройство не было полностью синхронизировано.
Только после этого вы сможете успешно выполнить указанную выше операцию lvconvert --splitmirrors
.
Попробуйтеawk
:
awk '
BEGIN{FS=OFS="\t"} # if your file is space-delimited, leave this out
{c[$1]++;v[$1]+=$2}
END{
print "Name","count","Average"
for(f in c){print f,c[f],v[f]/c[f]}
}
' file
Мне нравятся оба ответа (SQL, AWK ), потому что они являются стандартными языками и реализуют алгоритм идиоматически. Я собирался еще больше понизить вопрос, потому что он, кажется, настаивает на конкретном решении.
Но именно в этом проблема fgdark :вы слишком полагаетесь на утилиты и не понимаете (алгоритма ).
How could I pipe together cut, grep, numaverage in this manor (other commands may help such as cat, uniq, wc)?
Вы можете «легко» найти конвейерное решение, начав с временных файлов, а когда цепочка заработает, вы объедините их вместе. Результат будет неудовлетворительным. У меня нет numaverage, для начала. Производительность также.
Здесь необходим какой-то «настоящий» язык программирования, например SQL или AWK. Или perl, или python, или C. Или bash -, но bash как скриптовый язык с ассоциативными массивами и арифметическими операторами , а не bash "только" как оболочка.
Вам не нужна усредненная()функция , как в случае решения SQL, вы можете просто считать, складывать и делить данные, которые вы прочитали, в свои массивы.
Поэтому, если вы хотите создавать дополнительные отчеты по данным, вам следует выбрать язык . SQL немного особенный, он хорошо подходит для анализа данных . Другие упомянутые (awk, perl, python, C, даже bash )сильны в данных обработке(манипулировании переменными/массивами/структурами ). Но есть большое совпадение.
Несколько лет я работал с SQL; так я бы сохранил запрос и его вызов:
SQL='select a as Name, count(*) as Count, avg(b) as Average'
SQL+=' from file'
SQL+=' group by a'
csvsql -tSH --query $SQL file | csvformat -T
'Это не критика, а попытка проиллюстрировать, как структурирован-язык структурированных запросов . Это хрестоматийная демонстрация предложения group by
с агрегатными функциями count
и avg
.
Bash предоставляет синтаксис +=
, позволяющий легко это сделать.
Используйте csvsql
изcsvkit
:
если ваш файл разделен пробелом -:
csvsql -d' ' -S -H --query 'select a as Name, count(*) as count, avg(b) as Average from file group by a' file \
| csvformat -D' '
или если ваш файл разделен табуляцией -:
csvsql -t -S -H --query 'select a as Name, count(*) as count, avg(b) as Average from file group by a' file \
| csvformat -T
Выход:
Name count Average
NEUTRON 2 14.471691
PION+ 2 0.7710725
PION- 3 7.74835266667
Возможно, вам потребуется установить его вместе сpip
:
pip install csvkit