сценарий оболочки для получения содержимого файла

Как правило, обе установки 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, который сделает то же самое за вас. Наконец, просто перезагрузите компьютер и посмотрите, что сработало для вас.

0
06.08.2019, 15:09
3 ответа

Поскольку 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}
}'
0
28.01.2020, 03:23

Перекрестный вопрос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 {} \;)...
0
28.01.2020, 03:23

легко найти файлы в соответствии со временем, которое вы предпочитаете. но для получения результата вы можете использовать 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]}}'

пояснение:

  1. -Ф\| :определите |как разделитель полей

  2. !/^\s *$/ :пропустить пустые строки

  3. if(Clause){Statement}else{statement}:очистить

  4. END{...}:этот блок выполняется, когда оператор расширен до EOF

0
28.01.2020, 03:23

Теги

Похожие вопросы