Как отфильтровать только определенные строки из файла?

Покопавшись в Plymouth, я думаю, что этот файл как-то связан с grub2. Содержимое файла читается как

if background_color 44,0,30,0; then
  clear
fi

Цвет меню загрузки grub2 (red: 44, green:0, blue: 30, transparency: 0), которое вы видите, если у вас установлено несколько ОС.

Но я до сих пор не знаю, что означает clearи почему в нем есть утверждение if.

0
26.12.2019, 13:42
2 ответа

Подход awk:

$ awk '$1=="\"ip\":"{
        ip=$2
       }
       $1=="\"country\":"{
        c[ip]=$2
       }
       $1=="\"score\":" && s[ip]<$2{ 
         s[ip]=$2
       }
       END{
           for(ip in c){
            print ip,c[ip],s[ip]
           }
       }' file 
"86.72.0.0/14", "France", 1
"86.64.0.0/12", "France", 1,
"86.75.224.0/21", "France", 1
"86.75.227.72/32", "France", 7.1
"86.75.227.72", "France", 
"86.75.224.0", "France", 1,

Или, если вам просто нужен IP-адрес с наибольшим количеством баллов и ничего больше:

$ awk '$1=="\"ip\":"{ip=$2}$1=="\"score\":" && score<$2{score=$2;sip=ip}END{print sip} ' file 
"86.75.227.72/32"
0
28.01.2020, 02:17
$ jq -r '.history | max_by(.score) |.ip' file.json
86.75.227.72/32

При этом используется jqдля поиска записи в массиве .history, которая имеет максимальное значение .score. Как только это найдено, значение .ipизвлекается из найденной записи.

Небольшие вариации в форматах вывода, здесь с выводом IP-адреса, страны, названия компании в формате CSV (, если доступно ), и оценкой из массива .history:

$ jq -r '.history[] | [.ip,.geo.country,.asns."15557".Company,.score] | @csv' file.json
"86.64.0.0/12","France",,1
"86.64.0.0/12","France",,1
"86.72.0.0/14","France",,1
"86.75.224.0/21","France",,1
"86.75.224.0/21","France","LDCOMNET, FR",1
"86.75.224.0/21","France",,1
"86.75.224.0/21","France","LDCOMNET, FR",1
"86.75.227.72/32","France","LDCOMNET, FR",7.1
"86.75.227.72/32","France","LDCOMNET, FR",1

И то же самое, но только с максимальным количеством очков:

$ jq -r '.history | max_by(.score) | [.ip,.geo.country,.asns."15557".Company,.score] | @csv' file.json
"86.75.227.72/32","France","LDCOMNET, FR",7.1
4
28.01.2020, 02:17

Теги

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