приращение счетчика в awk, если условие не работает - PullRequest
1 голос
/ 07 апреля 2020

Я хочу посчитать, сколько раз значение "gafgyt" появляется в моем входном файле. Мой входной файл input.txt:

"result": "Gen:Variant.New.Linux.Gafgyt.5"
"result": null
"result": "ELF:Gafgyt-DZ"
"result": null
"result": "Gen:Variant.Linux.Gafgyt.5"

и мой код:

awk -F ":" 'BEGIN { i=1 } IGNORECASE = 1 { if ($2 ~ /gafgyt/) { i++;print $2} else {} }' input.txt

Но значение счетчика i не увеличивается.

Ответы [ 2 ]

4 голосов
/ 07 апреля 2020

Вы также можете использовать grep, если вам все равно, где находится строка поиска в строке ввода.

$ grep -ic 'gafgyt' ip.txt 
3

Обратите внимание, что в своей попытке вы использовали : в качестве поля разделитель и хотел проверить только второе поле, но "result": "ELF:Gafgyt-DZ" приведет к Gafgyt-DZ" в третьем поле, потому что есть два : до этого.

4 голосов
/ 07 апреля 2020

Чтобы просто посчитать количество строк во всем файле Input_file, попробуйте:

awk -v IGNORECASE=1 '/gafgyt/{count++} END{print count}' Input_file

2-е решение: Выше будет рассматриваться только 1 вхождение на строку, в случае в ваших строках может быть несколько вхождений строки, и вы хотите сосчитать их все, затем попробуйте выполнить следующее.

awk '{count+=gsub(/[gG][Aa][fF][gG][yY][tT]/,"&")} END{print count}' Input_file

ИЛИ

awk '{lc=tolower($0); count+=gsub(/gafgyt/,"",lc)} END{print count} ' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...