Чистый Баш:
mapfile -t lines < input
for (( i=0; i < ${#lines[@]}; i+=4 ))
do printf "%s\n" "${lines[$i]}"
done
mapfile — это встроенная функция, добавленная в Bash 4, которая считывает стандартный ввод в массив, названный здесь lines
, с одной строкой на запись. Опция -t
удаляет последние символы новой строки.
Если вы хотите напечатать каждую четвертую строку, начиная со строки 4, вы можете сделать это в одной команде, используя mapfile
опцию обратного вызова -C
, которая запускает предоставленный код через каждые несколько строк с заданным интервалом. по -c
. Текущий индекс массива и следующая назначаемая строка передаются коду в качестве аргументов.
mapfile -t -c4 -C 'printf "%.0s%s\n"' < input
Здесь используется встроенная функция printf
; код формата %.0s
подавляет первый аргумент (индекс ), поэтому печатается только строка.
Вы можете использовать ту же команду для печати каждой четвертой строки, начиная со строки 1, 2 или 3, но вам придется добавить 3, 2 или 1 строку к input
, прежде чем передать ее в mapfile
. что, я думаю, доставляет больше хлопот, чем того стоит.
Это тоже работает:
mapfile -t lines < input
printf "%s%.0s%.0s%.0s\n" "${lines[@]}"
Здесь printf
потребляет четыре элемента массива lines
за раз, печатая только первый и пропуская остальные три с помощью %.0s
. Мне это не нравится, так как вам нужно вручную возиться со строкой формата для разных интервалов или начальных точек.
Вам нужно будет убедиться, что ядро распознало новый размер, например,. запустив fdisk -l /dev/<device>
или cat /sys/block/<device>/size
и проверив, что общий размер соответствует новому размеру, а не старому. Если вы используете паравиртуализированные драйверы на виртуальной машине, большинство из них справятся с этим автоматически.
Но если старый размер все еще отображается, можно использовать echo 1 > /sys/block/<device>/device/rescan
, чтобы сообщить ядру, что размер устройства изменился.
Как только ядро узнает новый размер всего устройства, в вашем случае нет таблицы разделов для редактирования, поэтому вы можете перейти непосредственно к расширению файловой системы, используя инструмент, зависящий от файловой системы -.
Для файловых систем ext2/ext3/ext4 вы можете использовать resize2fs /dev/<device>
, независимо от того, смонтирована файловая система в данный момент или нет.
Для XFS файловая система должна быть смонтирована для ее расширения, и команда будет xfs_growfs <mount point pathname>
.
Другие типы файловых систем имеют собственные правила и инструменты расширения.
Если ваш дистрибутив включает fsadm
, он предоставляет унифицированный метод изменения размера файловых систем ext2/ext3/ext4, ReiserFS и XFS (, мы надеемся, что в будущем он будет расширен для охвата других типов файловых систем ). Команда будет fsadm resize /dev/<device>
.
Если диск полностью пуст (нет разделов, файловых систем и т. д. ), вам не нужно ничего делать. В противном случае вам нужно будет использовать такую программу, как fdisk, для изменения размера разделов и файловых систем внутри них.
Кроме того, у вас не может быть файловой системы без раздела, если только используемая вами ОС не записывает данные в случайные места, но тогда она не загружается.