Не так ясно, хотя, увидев ваши образцы и попытку, я мог бы написать это.Не могли бы вы попробовать следующее (также протестировано только с предоставленными вами образцами).
awk '
BEGIN{
FS="\\|\\|\\|"
}
FNR==NR{
a[$0]=$0
next
}
{
val=$2
}
{
flag=""
for(i in a){
if(a[i] ~ val){
flag=1
}
}
}
!flag
' pattern_file Input_file
Несколько замечаний, которые следует отметить:
1 - Для большей безопасности я удалил пробел в последней строке каждой строкив Pattern_file и во 2-м поле Input_file (если их там нет, вы можете удалить sub(/[[:space:]]+$/,"")
AND sub(/[[:space:]]+$/,"",$2)
из приведенного выше кода. Я также удаляю символы, такие как ()[]
, чтобы избежать любых ошибок в сопоставлении (при проверке только условий, фактическихсодержимое будет напечатано в нем, хотя).
2- Также я сохранил весь файл (шаблон один) в массив, а затем для каждой строки Input_file я проверяю, соответствует ли он какой-либо контент в массиве или нет, установка флага при совпадении.
3 - Если флаг НЕ установлен, кажется, что совпадение не найдено, поэтому печать содержимого из Input_file затем.