Порядок вывода Grep с несколькими шаблонами - PullRequest
0 голосов
/ 15 февраля 2020

Файл, который я ищу (fruit.text), похож на приведенный ниже фрагмент, данные отображаются в случайном порядке, который я не могу контролировать.

.... fruit = apple ,. ..qty = 3, ... состояние = плохое, ....

... количество = 4, ... состояние = отличное, ... фрукты = апельсин, ...

... условие = хорошо, ... кол-во = 2, ... фрукты = банан, ...

Моя команда Grep: grep -Eo 'fruit.[^,]*'\|'qty.[^,]*'\|'condition.[^,]*' fruit.txt

Это приводит к выводу как:

фрукты = яблоко

кол-во = 3

состояние = плохо

кол-во = 4

состояние = отлично

фрукты = апельсин

состояние = нормально

кол-во = 2

фрукты = банан

Какие правильно, однако, я ищу вывод для заказа, как я указал в grep cmd. ie, точно так же, как показано ниже:

фрукты = яблоко

кол-во = 3

состояние = плохо

фрукты = апельсин

кол-во = 4

состояние = отличное

фрукты = банан

кол-во = 2

состояние = в порядке

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Решение с gawk:

сначала я добавил несколько дополнительных символов ',' к входу:

....,fruit=apple,...,qty=3,...,condition=bad,....
...,qty=4,...,condition=great,...,fruit=orange,...
...,condition=ok,...,qty=2,...,fruit=banana,...

Затем я написал этот сценарий awk (fruit.awk):

{ fruit ="";
  qty="";
  condition="";
  for (i = 1;i <= NF; i++){
        delete a;
        split($i,a,"=");
        if (a[1]=="fruit" ) { fruit=a[2]; }
        if (a[1]=="qty") { qty=a[2] }
        if (a[1]=="condition") { condition=a[2] }
   }
}
{ print "fruit=" fruit;
  print "qty=" qty;
  print "condition=" condition;
}

вывод: gawk -F , -f fruit.awk fruit.txt:

fruit=apple
qty=3
condition=bad
fruit=orange
qty=4
condition=great
fruit=banana
qty=2
condition=ok
0 голосов
/ 15 февраля 2020

Используя sed в несколько шагов:

sed -E 's/^/,/;
        s/(.*),(condition[^,]*)/\2\r,\1/;
        s/(.*),(qty=[^,]*)/\2,\1/;
        s/(.*),(fruit=[^,]*)/\2,\1/;
        s/\r.*//;
        s/,/\n/g' input.txt

Я начинаю с вставки , для ввода, где интересные данные начинаются в первом поле.
После condition Я добавляю \r, чтобы я мог удалить мусор после нахождения фрукта.

...