Как заставить экран переходить в черный цвет из терминала, а не просто выключаться?

Это чистое решение на awk, которое работает для двух шаблонов на строку (разделенных пробелами) в файле шаблонов с операцией логического И:

awk 'NR==FNR{patts[$1]=$2;next}{for (i in patts) if (($0 ~ i) && ($0 ~ patts[i])) print}' patterns file

Обновление :
Для сопоставления слова вместо регулярного выражения вы можете оценить эту альтернативу:

awk 'NR==FNR{patts[$0]="\\<" $1 "\\>.*\\<" $2 "\\>|\\<" $2 "\\>.*\\<" $1 "\\>";next} \
{for (i in patts) if ($0 ~ patts[i]) print}' patterns file1   

Фактически он преобразует шаблон 833 7777 в
\ . * \ | \ . * \ , который выполняет сопоставление слов и имитирует также логическое И для двух шаблонов.

Это решение протестировано и не соответствует записям типа G 77771 2833

Обновление №2
Это обеспечит сопоставление слов, операцию логического И и печать для сопоставленных групп с разделительной строкой.

awk 'NR==FNR{patts[$0]="\\<" $1 "\\>.*\\<" $2 "\\>|\\<" $2 "\\>.*\\<" $1 "\\>";next} \
{for (i in patts) {if ($0 ~ patts[i]) !found[i]?found[i]=$0:found[i]=found[i] ORS $0}} \
END{for (k in found) {print found[k];print "-----"}}' patterns file1

#Output
A 833 0 0 0 0 7777 0 0 0 0
F 7777 833
-----
D illicit Jam fox 33333
-----                  
C the cow jumps over the 311 moon 2222
----- 

Онлайн-тестирование здесь.

PS: Из-за awk-способа работы с ассоциативными массивами мы не можем повлиять в секции END на печать найденного массива. Будет как-то «случайным».

3
16.03.2016, 00:04
0 ответов

Теги

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