Конец раздела Linux больше размера физического диска и раздела

Еще один простойawk+sedподход, независимо от того, сколько столбцов у вас есть, но с хорошим отступом 3+ строк.

awk 'NR==1{split($0, clstr, /#/)} NR==2{split($0, type, /#/)}
     NR>2 {split($0, g, /#/); for (x in g) if(g[x]!="") print g[x], clstr[x], type[x]
}' <(sed -E 's/\t/#/g' infile)

Пояснения:

  • NR==1{split($0, clstr, /#/)}:Мы использовали awk split ()функцию , которая делит строку/строку/запись($0в awk указывает на всю строку как строка здесь )на части разделены хешем #и сохраняются в массиве с именем clstr, где это первая запись только с NR==1в качестве условия.

  • NR==2{split($0, type, /#/)}:Это будет делать то же, что описано выше, и вместо этого сохранять в массиве с именем typeи будет выполняться, когда это вторая запись, только с NR==2в качестве условия.

  • NR>2{... }:Этот блок кода будет выполняться для записей/строк, в которых N число R записей >2

    • split($0, g, /#/):то же, что и первый и второй элементы, и сохраняется в массиве с именем g.
    • for (x in g) if(g[x]!="") print g[x], clstr[x], type[x]:Теперь здесь мы перебираем элементы индекса массива g, и если его значение не было нулевым if(g[x]!=""), то сначала выводим его значение по g[x], следующее значение тех же индексов из массива clstr, а затем в typeмассив.

    Обратите внимание, что перед обработкой ввода мы заменяем все вкладки символом решетки#(Вы можете использовать другой символ, но вы должны убедиться, что он не встречается в вашем файле ), а затем передать его оч.

    <(sed 's/\t/#/g' infile)  ## or <(tr '\t' '#'< infile)
    

Ввод(Вкладка с разделителями):

cluster01   cluster02   cluster03  ... cluster72
typeA_1 typeA_1 type2  ...
g1_A    g4_D    g8_H
g2_B    g5_E    g9_I
g3_C    g6_F    g10_J
    g7_G    g11_K
        g12_L

Выход:

g1_A cluster01 typeA_1
g4_D cluster02 typeA_1
g8_H cluster03 type2
g2_B cluster01 typeA_1
g5_E cluster02 typeA_1
g9_I cluster03 type2
g3_C cluster01 typeA_1
g6_F cluster02 typeA_1
g10_J cluster03 type2
g7_G cluster02 typeA_1
g11_K cluster03 type2
g12_L cluster03 type2

0
20.12.2020, 12:47
1 ответ

Использование partedдля изменения размера раздела недостаточно, вам также необходимо изменить размер файловой системы на разделе, размер которого вы только что изменили(partedне делает этого ). У вас есть файловая система ext4 на /dev/sda1, поэтому после изменения размера раздела с помощью partedвам также нужно запустить sudo resize2fs /dev/sda2, чтобы изменить размер файловой системы (, работающей resize2fsбез размера, просто отрегулируйте размер файловой системы до размера базового устройства ). Без этого вы не сможете смонтировать файловую систему, и поэтому загрузка не удалась.

Разница между размерами в partedи lsblkзаключается в старых добрых метрических(ГБ )и двоичных(ГиБ )единицах. lsblkиспользует двоичные единицы (1 ГиБ равен 1024 МБ ), partedиспользует метрические единицы (1 ГБ равен 1000 МБ ). 500 ГБ — это около 465,66 ГиБ, так что здесь ничего странного не происходит.

1
18.03.2021, 22:41

Теги

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