Использование awk:
$ awk -F'[".]' 'NR==FNR{a[$0]; next} $2 in a{$0="//"$0} 1' list1 list2
//'include "test1.sv"
'include "test2.sv"
//'include "test3.sv"
'include "test4.sv"
Как это работает:
-F'[".]'
Это указывает awk разделять поля всякий раз, когда встречается "
или .
.
NR==FNR{a[$0]; next}
При чтении первого файла, list
, это говорит awk создать ключ в ассоциативном массиве a
, равный текущей строке, а затем пропустить остальные команды и перейти к строке next
.
Подробнее:NR
— это общее количество строк, которые awk уже прочитал. FNR
— количество строк, прочитанных до сих пор из текущего файла. Это, когда FNR==NR
, мы читаем первый файл.
$2 in a{$0="//"$0}
При чтении второго файла это указывает awk добавить //
в начало строки, если второе поле в текущей строке является ключом в ассоциативном массиве a
.
1
Это загадочное сокращение awk для печати -строки -.
Использование дополнительной строки, упомянутой в комментариях:
$ cat list1
test1
test3
usb30_suspend_resume
$ cat list2
'include "test1.sv"
'include "test2.sv"
'include "test3.sv"
'include "usb30_suspend_resume.sv"
'include "test4.sv"
$ awk -F'[".]' 'NR==FNR{a[$0]; next} $2 in a{$0="//"$0} 1' list1 list2
//'include "test1.sv"
'include "test2.sv"
//'include "test3.sv"
//'include "usb30_suspend_resume.sv"
'include "test4.sv"
Файлы в pastebin имеют конечные пробелы в list1, и оба файла имеют окончание строки -в стиле окон -. Для обработки этого формата используйте:
awk 'NR==FNR{a[$1]; next} $2 in a{$0="//"$0} 1' FS='[[:space:]]' list1.txt FS='[".]' list2.txt
firewalld параметр service
представляет собой строку. Используйте цикл для повторения списка сервисов. Например
- name: firewalld configuration
firewalld:
zone: public
service: "{{ item }}"
permanent: yes
state: enable
notify: reload firewalld
loop:
- https
- http