Получить определение задания из списка заданий, перечисленных во втором файле.

Чтобы сделать это с помощью встроенных -утилит, вы можете следовать этому немного более ручному процессу, используя bluetoothctl.

hcitool scan  # to get the MAC address of your device
bluetoothctl
agent on
scan on  # wait for your device's address to show up here
scan off
trust MAC_ADDRESS
pair MAC_ADDRRESS
connect MAC_ADDRESS

Сообщения в этой проблеме Github предлагают способ написания скрипта, но это не сработало для меня, так как мне нужно было вручную ждать результатов сканирования.

1
21.05.2021, 13:41
4 ответа

Поскольку все задания заканчиваются пустой строкой, вы можете использовать perlв «режиме абзаца» (, что означает, что он рассматривает \n\n, пустую строку, как разделитель записей, эффективно обрабатывая «абзацы». как "линии"):

$ perl -00lne 'print if /insert:\s+PPC_SA[153]\s/' file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0

-00включает режим абзаца, а затем сценарий печатает все записи, соответствующие insert:\s+PPC_SA, за которыми следует один из 1, 5или 3и еще один пробельный символ.

Конечно, это не очень практично, если у вас много целевых идентификаторов, поэтому вы также можете обобщить это на:

cat file | 
    perl -00lne 'BEGIN{ $k{$_}++ for @ARGV; @ARGV=()} /insert:\s+(\S+)/; print if $k{$1}' PPC_SA1 PPC_SA5 PPC_SA3

Или, как вариант, вы можете использовать awk. Сохраните ваши целевые идентификаторы в файле (с именем target_ids, в этом примере ), по одному в строке, и запустите:

$ awk '(NR==FNR){a[$1]++; next}
       { 
         if(/insert:/ && $2 in a){want=1} 
         if(want){print}
         if(/^\s*$/){want=0}
        }' target_ids file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
4
28.07.2021, 11:30

А что насчет этого?

awk 'NR==FNR{ trgtJbs[$0]; next } ($2 in trgtJbs)' targetJobs RS='' allJobs

сначала мы читаем все targetJobs из файла targetJobs, затем, поскольку вы упомянули, что каждое задание в файлеallJobsотделяется пустой строкой, поэтому затем мы устанавливаем запись R . ] S разделитель для этого второго файла на пустую строку и проверка существования второго поля каждого блока заданий -в массиве trgtJbs, который мы использовали, после чего они будут выведены.

На всякий случай, если вы хотите сохранить эту пустую строку в выводе, выполните:

awk 'NR==FNR{ trgtJbs[$0]; next }
    ($2 in trgtJbs){ print sep $0; sep=ORS }' targetJobs RS='' allJobs
4
28.07.2021, 11:30

С помощью awkв режиме абзаца вы можете выбрать нужные записи:

awk -v RS= -v FS='\n' -v ORS='\n\n' '$1~/PPC_SA(1|3|5)[[:space:]]+/' file
insert: PPC_SA1   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"
std_err_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.err"
alarm_if_fail: 1
group: P
resources:

insert: PPC_SA3   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
description: "Run program"
std_out_file: "/home/PROD/autosys/logs/${AUTO_JOB_NAME}_`date +%y%m%d`.log"

insert: PPC_SA5   job_type: CMD
name: PPC
command: sa
machine: P
owner: cat
permission:
date_conditions: 0
2
28.07.2021, 11:30

Использованиеawk:

awk '/insert:\s+PPC_SA[135]\s+/,/^$/' input

1
28.07.2021, 11:30

Теги

Похожие вопросы