Еще один простой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
Использование parted
для изменения размера раздела недостаточно, вам также необходимо изменить размер файловой системы на разделе, размер которого вы только что изменили(parted
не делает этого ). У вас есть файловая система ext4 на /dev/sda1
, поэтому после изменения размера раздела с помощью parted
вам также нужно запустить sudo resize2fs /dev/sda2
, чтобы изменить размер файловой системы (, работающей resize2fs
без размера, просто отрегулируйте размер файловой системы до размера базового устройства ). Без этого вы не сможете смонтировать файловую систему, и поэтому загрузка не удалась.
Разница между размерами в parted
и lsblk
заключается в старых добрых метрических(ГБ )и двоичных(ГиБ )единицах. lsblk
использует двоичные единицы (1 ГиБ равен 1024 МБ ), parted
использует метрические единицы (1 ГБ равен 1000 МБ ). 500 ГБ — это около 465,66 ГиБ, так что здесь ничего странного не происходит.