как напечатать все строки в файле, у которого определенное поле меньше некоторого входного значения - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть файл file_name со следующими строками:

line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]
line2: Order='O2', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=100, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]

Ожидаемый результат:

line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]

Идеальный ожидаемый результат:

line1: Order='O1', [Product='P2', Weight=90, Unit=Kg]

Мне нужнонапечатать все строки для любого продукта, вес которого меньше 100. Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Другой способ с awk:

awk '
  {
  i = split ( $0 , a , /Weight=/ )
  for ( j = 2 ; j <= i ; j++ ) {
    sub ( /,.*/ , "" , a[j] )
    if ( a[j]+0 < 100 ) {
      print
      next
      }
    }
  }
' infile
0 голосов
/ 25 февраля 2019

не очень надежный подход:

$ awk -F'[ =,]' '{for(i=1;i<NF;i++) 
                    if($i=="Weight" && $(i+1)<100) 
                       {print; next}}' file

line1: Order='O1', ProductDetail: [Product='P1', Weight=100, Unit=Kg], ProductDetail: [Product='P2', Weight=90, Unit=Kg], ProductDetail: [Product='P3', Weight=110, Unit=Kg]

установите разделители на основе структуры вашего входного файла, найдите поисковый тег «Вес» и проверьте значение в следующем поле (из-за= разделитель).

...