Grep несколько текстовых файлов с каждым файлом выводится в новой строке - PullRequest
0 голосов
/ 09 марта 2019

У меня есть 4 текстовых файла с этим содержанием:

text1.txt

<a data-role="sku" data-code="1">
      ...
<a data-role="sku" data-code="2">

text2.txt

<a data-role="sku" data-code="19">
      ...
<a data-role="sku" data-code="48">
<a data-role="sku" data-code="93">

text3.txt

this file text not have any date-code

text4.txt

<a data-role="sku" data-code="333">
<a data-role="sku" data-code="444">

как я могу использовать grep , чтобы получить такой вывод

я хочу, чтобы каждый текстовый файл выводился в новой строке, и если текстовый файл не имеет точного соответствия, то будет заменен на NO

1,2
19,48,93
NO
333,444

.

я пробую это grep -oP '(?<="data-code":")[^"]*' text* но я получаю такие результаты:

1
2
19
48
93
333
444

1 Ответ

0 голосов
/ 09 марта 2019

Не могли бы вы попробовать следующее (если вы хорошо с awk):

awk -F'[",]' '
BEGIN{
  OFS=","
}
FNR==1{
  if(val){
     print val
  }
  val=""
}
/Code/{
  val=(val?val OFS:"")$(NF-2)
}
END{
  if(val){
     print val
  }
}' *.txt

Вывод будет следующим.

1,2
7,9,14


РЕДАКТИРОВАТЬ: Поскольку OP немного изменил стиль Input_file в комментариях, поэтому отредактировал код в соответствии с ним сейчас.

awk -F'"' '
BEGIN{
  OFS=","
}
FNR==1{
  if(val){
     print val
  }
  val=""
}
/data-code/{
  val=(val?val OFS:"")$2
}
END{
  if(val){
     print val
  }
}' *.txt


РЕДАКТИРОВАТЬ2: Согласно комментарию OP, OP необходимо напечатать NO для Input_file, где не найдено совпадений, тогда может помочь следующее.

awk -F'"' -v val="begin" '
BEGIN{
  OFS=","
}
FNR==1{
  if(val!="begin"){
    print val?val:"NO"
  }
  val=""
}
/data-code/{
  val=(val?val OFS:"")$(NF-1)
}
END{
  print val?val:"NO"
}' *.txt
...