Grep шаблон и выберите часть после соответствующего шаблона - PullRequest
0 голосов
/ 11 октября 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

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

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 голосов
/ 11 октября 2018

РЕДАКТИРОВАТЬ: Добавление решения в соответствии с новым вопросом OP.

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'

ИЛИ

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


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

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

Теперь добавляется также форма решения с одним вкладышем.

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

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

awk '
NF>1{                                                    ##Checking if NF is greater than 1.
  for(i=1;i<=NF;i++){                                    ##Using for loop to go through from value 1 to till value of NF.
    if($i ~ /41572/ || $i ~ /90000/ || $i ~ /90002/){    ##Checking if value of fields is either 41572 OR 90000 OR 90002 then do following.
      printf("%s%s",$i,i==NF?ORS:OFS)                    ##Print the field value in case above condition is TRUE with NEW line if i==NF or space if not.
    }
  }
  next                                                   ##Next will skip all further statements from here.
}
1                                                        ##1 will print all edited/non-edited lines here.
' Input_file                                             ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...