Как правило, обе установки grub мирно сосуществуют. Это может зависеть от места, в которое вы установили grub, например. /dev/sdX
может иметь приоритет над /dev/sdYz
(, у вас действительно должен быть установлен только один grub в основании одного диска, т.е./dev/sdY
). По моему опыту, хотя установка grub, которая была запущена update-grub
совсем недавно, будет иметь приоритет.
Вам следует загрузить систему, которую вы предпочитаете, и внести в нее желаемые изменения конфигурации. Затем вы можете заново сгенерировать файл grub.cfg
и посмотреть, сохраняются ли изменения. В системах на основе Debian вам необходимо установить нужные параметры конфигурации в /etc/default/grub
. Это включает в себя такие вещи, как ОС по умолчанию и время ожидания перед загрузкой. См. документацию GNU для обзора доступных опций. Затем вы можете запустить следующую команду, чтобы применить эти изменения.
sudo grub-mkconfig -o /boot/grub/grub.cfg
Существует также скрипт-оболочка update-grub
, который сделает то же самое за вас. Наконец, просто перезагрузите компьютер и посмотрите, что сработало для вас.
Поскольку input.log является вашим вводом, у меня есть это, которое работает с gawk, все еще пытаюсь выяснить это с awk:
cat input.log |
gawk -F"|" \
#print the header
'BEGIN{print"Type, Number,ID,submitted,notsubmitted"}
#only work on non empty lines
NF>0{
#create an ID from the first three fields
n=$1","$2","$3;
#everytime the ID pops up, increment subindex 1 or 2 depending on the value of field 4
if($4=="S:1"){
array[n][2]++}
else{
array[n][1]++}
}
#print the final array
END{for(i in array){
#if the value has never been seen declare it to be zero
if(array[i][1]){
m=array[i][1]}
else {
m=0}
if(array[i][2]){
n=array[i][2]}
else {
n=0}
print i","m","n}
}'
Перекрестный вопросhttps://stackoverflow.com/q/57377173/3220113был отложен. Я скопирую принятый ответ здесь, другой вопрос можно удалить.
Для одного файла:Сначала упростите обработку потока с помощью awk (все это можно сделать в awk, для немного лучшей производительности):
sed -nr 's/\|/,/g;s/(^R_MT,.*),S:([^ ]) *$/\1 \2/p' <(zcat abc.log.2019041607.gz)
Результат (после добавления дополнительных тестовых строк)
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 1
R_MT,D:1234,ID:413 0
R_MT,D:1234,ID:413 0
R_MT,D:1234,ID:413 0
R_MT,D:1234,ID:413 0
R_MT,D:1234,ID:413 0
R_MT,D:1234,ID:414 1
R_MT,D:1234,ID:414 1
R_MT,D:1235,ID:413 1
R_MT,D:1235,ID:413 1
А теперь посчитайте их в awk, используя массив a для имен полей.
sed -nr 's/\|/,/g;s/(^R_MT,.*),S:([^ ]) *$/\1 \2/p' <(zcat abc.log.2019041607.gz) |
awk '{a[$1]; if ($2>0) notsub[$1]++; else submit[$1]++;}
END {for (i in a) print i "," submit[i]+0 "," notsub[i]+0;}
'
Для 5 файлов сначала определите, какие результаты вы хотите получить. В каждом файле отдельный выходной файл :использует цикл, подобный
while IFS= read -r filename; do
... <( zcat "${filename}")...
done < <(find datalogs -type f -name "abc*" -mmin -5)
Результаты из 5 файлов добавлены в одну сумму
... <( find datalogs -type f -name "abc*" -mmin -5 -exec zcat {} \;)...
легко найти файлы в соответствии со временем, которое вы предпочитаете. но для получения результата вы можете использовать awk
вот так:
awk -F\| '!/^\s*$/{if($4=="S:0"){Arr0[$1","$2","$3]+=1} else {Arr1[$1","$2","$3]+=1}}END{for(i in Arr1){print i,",",Arr0[i],",",Arr1[i]}}'
пояснение:
-Ф\| :определите |
как разделитель полей
!/^\s *$/ :пропустить пустые строки
if(Clause){Statement}else{statement}
:очистить
END{...}
:этот блок выполняется, когда оператор расширен до EOF