Несколько переменных из файла внутри AWK - PullRequest
0 голосов
/ 11 октября 2018

У меня есть файл с именем users.txt, который содержит список пользователей в этом формате:

bob
john
alex
tom

Мне нужно запустить этот оператор AWK и использовать каждое из этих имен в качестве шаблонов и выводить в файл

awk '/PATTERN/{x=NR+6}(NR<=x){print}' input.txt >> output.txt

Как сделать так, чтобы AWK проходил через каждое имя и использовал их в качестве шаблонов поиска?

Пример входного файла:

bob@servername
10/09/2018 19:11:19
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff-
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
alex@servername
10/09/2018 16:33:55
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff-
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
doug@servername
10/09/2018 13:22:66
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff-
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`

Вывод должен быть таким,только с пользователями, которые находятся в файле users.txt (во входном файле гораздо больше пользователей, которых я не хочу видеть)

bob@servername
10/09/2018 19:11:19
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff

Ответы [ 2 ]

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

Возможно, вы также можете использовать grep:

grep input -wf users -A 6

Это позволит сопоставить имена из файла пользователя с входным файлом и вывести 6 строк после совпадения.С флагом w grep будет совпадать только с полными словами, вы можете пропустить его в зависимости от ваших потребностей.

Если ваш grep не поддерживает -A, это может работать:

grep input -wf users -n | cut -d: -f1 | xargs -n 1 -I {} sed -n "{},/^::*$/ p" input

или это:

grep input -wf users | xargs -n 1 -I {} sed -n "/{}/,/^::*$/ p" input
0 голосов
/ 11 октября 2018

При чтении первого файла добавляйте каждую строку к строке шаблона, разделяя их |.Затем при обработке второго файла протестируйте строку по шаблону.

awk 'NR==FNR { pattern = pattern (pattern ? "|" : "") $0; next }
     $0 ~ pattern { x = FNR + 6 }
     FNR <= x' users.txt input.txt

Я проверил это на Mac OS High Sierra и Debian Linux с вашими примерами файлов, результат был:

bob@servername
10/09/2018 19:11:19
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff-
alex@servername
10/09/2018 16:33:55
50152 command issued.

  weid: A1Pz64385236
  job_name: xxx-xxx-xxx-xxx-xxx-xxx
  command: fff-fff-fff-fff-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...