Шаблон поиска и grep часть строки - PullRequest
0 голосов
/ 12 октября 2018

Шаблон Grep и выделение части строки после сопоставления шаблонов 41572: 90000: и 90002:

input

hyt : generation
str : 122344
stks : 9000233
dhy : 9000aaaa
sjyt : hist : hhh9000kkk
Count ch : 41572:47149-47999/2(14485-14910) 41584:47149-47999/2(14911-15449) 90000:47919-47999/2(15447-15477) 90002:47919-47999/2(15478-15418) 
drx : 12345

здесь используется код

awk '
{
  flag=""
  for(i=1;i<=NF;i++){
    if($i ~ /41572/ || $i ~ /90000/ || $i ~ /90002/){
       flag=1
       printf("%s%s",$i,i==NF?ORS:OFS)
    }
  }
}
!flag
'   Input_file

с кодом выше от MrRavinderSingh13, я получил следующий вывод

hyt : generation
str : 122344
stks : 9000233
dhy : 9000aaaa
sjyt : hist : hhh9000kkk
41572:47149-47999/2(14485-14910) 90000:47919-47999/2(15447-15477) 90002:47919-47999/2(15478-15418) 
drx : 12345

Хотел бы получить желаемый следующий вывод

hyt : generation
str : 122344
stks : 9000233
dhy : 9000aaaa
sjyt : hist : hhh9000kkk
Count ch : 41572:47149-47999/2(14485-14910) 90000:47919-47999/2(15447-15477) 90002:47919-47999/2(15478-15418) 
drx : 12345

Заранее спасибо

1 Ответ

0 голосов
/ 12 октября 2018

Учитывая, что ваш фактический файл Input_file совпадает с показанным примером, если да, то вам может помочь следующее.

awk '
{
  flag=flag2=""
  for(i=3;i<=NF;i++){
    if($i ~ /41572/ || $i ~ /90000/ || $i ~ /90002/){
       flag2++
       if(flag2==1){
           printf("%s %s : ",$1,$2)
       }
       flag=1
       printf("%s%s",$i,i==NF?ORS:OFS)
    }
  }
}
!flag
'   Input_file

Объяснение: Добавление объяснения здесь также длякод выше.

awk '                                                     ##Starting awk script here.
{                                                         ##Starting main block from here when Input_file is being read.
  flag=flag2=""                                           ##Nullifying variables named flag and flag2 here.
  for(i=3;i<=NF;i++){                                     ##Starting a for loop from i value from 3 to NF value in current line.
    if($i ~ /41572/ || $i ~ /90000/ || $i ~ /90002/){     ##Checking condition if any fields value is having keywords mentioned by OP or not.
       flag2++                                            ##Increment variable flag2 here with one.
       if(flag2==1){                                      ##If flag2 value is 1 then print 1st and 2nd column value here.
           printf("%s %s : ",$1,$2)
       }
       flag=1                                             ##Setting variable named flag value to 1 here.
       printf("%s%s",$i,i==NF?ORS:OFS)                    ##Printing value of current field along with check of if i==NF then print new line else print OFS.
    }
  }
}
!flag                                                     ##Checking condition here if !flag then print the current line.
'  Input_file                                             ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...