Если количество точек данных (я принимаю) в каждом из Ваших экспериментов (снова, я принимаю) всегда равняется 4, можно использовать эту остроту Perl:
perl -ple '$. % 4 == 1 and print "Exp", ++$i' your_file
Как это работает
-p
переключатель говорит Perl циклично выполняться по данному файлу (файлам) линию за линией (по умолчанию) и печатать каждую строку после выполнения безотносительно кода, который Вы предоставляете.-l
переключатель говорит Perl автоматически добавлять новую строку (по умолчанию) каждому print
оператор.-e
переключатель сообщает Perl что независимо от того, что прибывает после того, как это - код для выполнения (код, который будет выполнен перед, каждая строка файла печатается).$.
содержит номер строки, в настоящее время обрабатываемый. Если тот номер строки является конгруэнтным 1 4 по модулю ($. % 4 = 1
) это означает, что мы должны вставить Exp #
перед ним.$. % 4 == 1
и если это верно, мы печатаем Exp ++$i\n
(где \n
был добавлен -l
переключатель). Это работает, потому что неопределенной переменной дает значение нуля Perl, когда это сначала используется в качестве целого числа.Заставить его работать с несколькими файлами
$.
переменная не сбросит свое значение при обработке нескольких файлов сразу. Очевидно, это не то, что Вы хотите. Можно работать вокруг этого путем явного выписывания неявного цикла, созданного -p
в вышеупомянутой остроте, таким образом, можно управлять continue
блок.
perl -le '
while(<>){
$. % 4 == 1 and print "Exp ",++$i
} continue {
print; # Print the current line
if(eof){ # If the next line is the end-of-file
close ARGV ; # Close the current filehandle to reset $.
$i = 0 ; # Reset the experiment counter if you need
}
}
' list_of_your_files
Примечания
Оба из вышеупомянутых решений распечатают измененный файл (файлы) к стандартному выводу. Чтобы эмулировать редактирование на месте (т.е. отредактировать сами файлы), добавьте a -i
переключатель:
perl -pi -le '$. % 4 == 1 and print "Exp", ++$i' your_file
Удостоверьтесь, что Вы не помещаете другой переключатель непосредственно после -i
поскольку это интерпретирует что-либо после него как расширение использования для создания файла резервной копии.
Я рекомендую протестировать без -i
сначала и затем добавьте его, если результаты являются удовлетворительными.
Некоторые команды кикстарта представляют задачи установки, которые должны быть выполнены до запуска основного установщика, поэтому они обрабатываются только внутри dracut
. Те, о которых я знаю, это:
text
, graphical
,cmdline
driverdisk
updates
mediacheck
Таким образом, они, вероятно, не будут работать в %include
, если цель %include
не видна внутри dracut
(, например, если вы внедрили ее в initrd или поместили на то же устройство, что и кикстарт...)
Если вам нужно использовать один из них, но он не может быть в основном кикстарте, вы можете попробовать вместо этого использовать соответствующие параметры загрузки :
inst.text
, inst.graphical
,inst.cmdline
inst.dd=<url>
inst.updates=<url>
rd.live.check