Grep для значения больше целого в случайном месте в строке - PullRequest
1 голос
/ 04 июня 2019

Grep для значения, превышающего известное значение в случайном месте в строке.

Например, Мой файл

a:10,c:10/2,b:999/3,d:9999/3
a:10,b:1000/2,c:999/3,d:9999/3

Здесь значение b - это значение после деления. b = 1000/2 - 500

Операция всегда будет делением.

как мне grep для всех значений b> = 500. Учитывая, что b может появиться в любом месте строки?

Ответы [ 3 ]

2 голосов
/ 04 июня 2019

awk на помощь!eval функции нет, но, учитывая, что это всегда деление, вы можете просто реализовать его.

$ awk -F'[,:]' '{for(i=1;i<NF;i+=2) 
                   if($i=="b") 
                     {split($(i+1),b,"/"); 
                      if(b[1]/b[2]>=100) print $i":"$(i+1)}}' file

b:999/3
b:1000/2

Вы также можете распечатать вычисленное значение, но не ясно, что вы хотели.

1 голос
/ 04 июня 2019
$ awk -v RS=, -F'[:/]' '$1=="b" && ($2/$3)>=500' file
b:1000/2
1 голос
/ 04 июня 2019

Не могли бы вы попробовать следующее (протестировано с GNU awk), учитывая, что ваш Input_file будет таким же, как показанные примеры.

awk 'BEGIN{FS="[:/]";RS="[\n,]"} $1=="b" && ($2/$3>=500)'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...