Удалить столбец, если все записи после заголовка представляют собой определенную строку

При изменении размера экстента существующий размер группы VG должен быть кратен размеру экстента. В вашем случае существующий размер виртуальной группы составляет 259 экстентов *4 МБ = 1036 МБ. Если вы планируете использовать размер экстента 16 МБ, существующий размер виртуальной группы не кратен (1036 МБ / 16 МБ имеет остаток ).

Из вашего vgdisplay,Я вижу, что у вас еще нет LV, выделенных в VG, поэтому проще всего в вашем случае удалить существующую VG:

vgremove vg3

, а затем воссоздать его с помощью

vgcreate -s 16m vg3 /dev/path_to_the_pv_dev
1
10.10.2019, 19:49
2 ответа

Используйтеawk:

awk -v na="./." '
BEGIN{OFS=FS}
NR==FNR && NR>1 {
  for(i=1;i<=NF;i++){if($i!=na){s[i]=1}}
}
NR!=FNR {
  for(l in s){true} 
  for(i in s){if (i!=l){printf "%s"OFS,$i} else {printf "%s\n",$i}}
}
' file file

Возможно, вам придется изменить BEGIN{OFS=FS}на BEGIN{OFS=FS="\t"}, если ваш файл разделен табуляцией.

Пояснение:

  • Пройтись по файлу дважды(awk... file file)
  • Первый раз(NR==FNRи NR>1для исключения заголовка )вы проверяете, что в ваших столбцах(i)есть хотя бы одно значение, отличное от na="./.", сохраните номер столбца в переменной s.
  • Второй раз(NR!=FNR)для каждого столбца, сохраненного в s, распечатать значение столбца. (Первый цикл позволяет узнать последний столбец, который будет напечатан (, сохраненный в переменной l, поэтому вы можете выбрать между печатью OFSили \n.)

Выход:

Sample1 Sample2 Sample3 Sample5
./../../../.
./../../. A/G
./../../../.
A/A A/A A/G./.

Если ваш файл был разделен табуляцией -, вывод будет немного лучше, если нет, вы можете сделать его лучше, добавив |column -t. Тогда это будет выглядеть так:

Sample1  Sample2  Sample3  Sample5
./.     ./.     ./.     ./.
./.     ./.     ./.      A/G
./.     ./.     ./.     ./.
A/A      A/A      A/G     ./.
2
27.01.2020, 23:30
$ perl -F'\t' -lane '
   push @{$AoA[$.-1]}, map { push @Cols2Keep, $_ if $. > 1 && $F[$_] ne "./." && !$seen{$_}++; $F[$_] } 0.. $#F}
   {print join "\t", @{$AoA[$_]}[sort { $a <=> $b } @Cols2Keep] for 0.. $#AoA
' file.tsv

Результаты:

Sample1 Sample2 Sample3 Sample5
./.    ./.    ./.    ./.
./.    ./.    ./.     A/G
./.    ./.    ./.    ./.
A/A     A/A     A/G    ./.

Работа:

  • массив массива @AoA, сохраняет файл в массиве, проиндексированном номером записи, $.. Поскольку $.начинается с 1, а массивы в Perlравны 0-indexed, мы нормализуем$.
  • Массив
  • @Cols2keep хранит номер столбца, в котором был найден элемент non./.. Нам также не нужны дубликаты, поэтому мы -дублируем его с помощью хэша %seen, ключами которого являются номера этих столбцов. Ограничение в том, что мы пропускаем проверку первой записи.
0
27.01.2020, 23:30

Теги

Похожие вопросы