bПожалуйста, у меня есть файл журнала «log1.txt», который содержит поля, разделенные символом «|» Я хочу, чтобы извлечь строки в соответствии с конкретными требованиями и у меня есть еще один конфигурационный файл «code.conf» или я помещал найденные значения в поле 5. здесь файл журнала:извлекать информацию из файла на основании условий
+++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++
abc|2| 11| 3| 1000| 13|scql| 0| | | 0| 0| plk| stv| 2| 0
trc|2| 20| 3| 1200| 30|tkgl| 0| pajd|jahd| 0| 0| klm|fdkl|1|0
klm|2| 0| 3| 1300| 19|mlpo| 0| | | 0| 0| qnhd| pkjs| 2| 0
klm|2| 20| 3| 1600| 11|mlpo| 19| | | 0| 0| qnhd| pkjs| 2| 0
++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
И вот конфигурационный файл «code.conf»
++++++++++++++++++++++++++++++++++++++++++++++++ +++++
1000
1300
1200
1600
++++++++++++++++++++++++++++++++++++++ +++++++++++++++
Теперь я хочу, чтобы извлечь из файла журнала только строки, соответствующие этим условиям:
если поле 2 равно «2» и поле 4 равным «3», а поле 5 должно содержать одно из значений, объявленных в файле конфигурации, и (поле 3 не равно «0» или «20» или) или поле 8 не равно «0»
Я попытался это, но не работает правильно:
awk -F' *\\| *' 'FNR==NR {a[$1];next} $2==2 && $4==3 && $5 in a && ($3!=0 || $3!=20)|| $8!=0 ' file
вывод должен быть:
abc|2| 11| 3| 1000| 13|scql| 0| | | 0| 0| plk| stv| 2| 0
klm|2| 20| 3| 1600| 11|mlpo| 19| | | 0| 0| qnhd| pkjs| 2| 0
Я думаю, что ошибка происходит из логики
спасибо
Как 1600 на выходе, когда он не в 'code.conf'? – anubhava
это просто ошибка 1600 существует в code.conf, я добавлю его – mond14