Microsoft представила новую настройку под названием fastboot в Windows 8 (Я полагаю ), которая ускоряет процесс загрузки Windows. Из-за этого альтернативные загрузчики не запускаются.
Быстрая загрузка не может быть отключена в BIOS, но должна быть отключена в Windows. Вы можете найти эту опцию в одном из диалогов настроек энергии.
С UEFI не должно возникнуть проблем, если вы придерживаетесь более новых руководств по настройке Grub. Старый метод MBR больше не следует использовать.
Использование AWK:
awk '!((NR - 1) % 4)' input > output
Выяснение того, как это работает, остается читателю в качестве упражнения.
Звоните сscriptname filename skip
(4 в вашем случае )Он работает, вытягивая iter
строк из верхней части файла, а затем выводя только последние. Затем он увеличивает iter
на skips
и повторяет до тех пор, пока значение iter
не превышает lines
в file
.
#!/bin/bash
file="$1"
lines=`wc -l < "$file"`
skips="$2" || "4"
iter=1
while [ "$iter" -le "$lines" ]; do
head "$file" -n $iter | tail -n 1
iter=$(( $iter + $skips ))
done
С GNUsed
:
sed '1~4!d' < input > output
Со стандартнымsed
:
sed -n 'p;n;n;n' < input > output
С 1
и 4
в переменных $n
и $i
:
sed "$n~$i!d" # GNU only
awk -v n="$n" -v i="$i" 'NR >= n && (NR % i) == (n % i)'
Добавление обязательного решения perl:
perl -ne 'print if $. % 4 == 1' input > output
Использованиеsplit
(GNU coreutils):
split -nr/1/4 input > output
-n
генерировать CHUNKS
выходные файлы и CHUNKS
как
r/K/N
использовать циклическое распределение и выводить только Kth из N в стандартный вывод без разделения строк/записей Версия Python, просто для удовольствия:
with open('input.txt') as f:
for i, line in enumerate(f.readlines()):
if i%4 == 0:
print(line.strip())
POSIX sed
:Этот метод использует posixly sed, поэтому его можно запускать везде или, по крайней мере, те sed, которые уважают posix.
$ sed -ne '
/\n/!{
H;s/.*//;x
}
:loop
$bdone
N;s/\n/&/4
tdone
bloop
:done
s/.//;P
' input.file
Другим является программная генерация кода sed для целей масштабируемости:
$ code=$(yes n | head -n 4 | paste -sd\; | sed s/n/p/)
$ sed -ne "$code" input.file
Perl
:мы заполняем -массив A до размера 4. Затем мы печатаем его первый элемент, а также очищаем массив.
$ perl -pe '
$A[@A] = @A ? <> : $_ while @A < 4;
$_ = (splice @A)[0];
' input.file
Чистый Баш:
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
. Мне это не нравится, так как вам нужно вручную возиться со строкой формата для разных интервалов или начальных точек.