Минизадачка на bash, множество вопросов )

mehanoid
zubastiy
тоесть объявлять переменную равную нолю все таки нужно?
Вообще в принципе необъявленные переменные в арифметических выражениях bash считает за ноль, но я привык всё же объявлять их все, чтобы не было путаницы
отлично!

for f in *AntiSpam.log; do let count+=$(grep -c URIBL_WS_SURBL $f);done && echo $count

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

zubastiy
Задача - посчитать колво строк с набором симоволов URIBL_WS_SURBL в множестве файлов с суффиксом AntiSpam.log находящихся в одном каталоге.

awk '/URIBL_WS_SURBL/ {a++} END {print a}' *AntiSpam.log

+ один проход (файлы обрабатываются единожды)
+ в одну строку
+ одна утилита
red
awk '/URIBL_WS_SURBL/ {a++} END {print a}' *AntiSpam.log

+ один проход (файл обрабатывается один раз)
+ в одну строку
+ одна утилита
(выделено мной)
Не могу не придраться к решению :)
Вам только кажется, что вы использовали ОДНУ утилиту. На самом деле, вместо *AntiSpam.log ваша утилита получает развёрнутый список всех найденных в каталоге файлов по этой маске. Кто их находит и передаёт вашей утилите?
Правильно, это делает bash, то есть в одну утилиту вы уже не уложились.

К примеру, если бы вам требовалось запустить ту же команду, скажем, по ярлыку типа .desktop или юниту системд, вам бы пришлось там писать уже не одну команду, а запускать баш, и уже в нём выполнять команду, или сразу вписывать туда запуск скрипта.
Natrio, я конечно в курсе что одни утилиты могут использовать и используют для своей работы другие утилиты, но в данном случае я подразумевал совершенно другое, ведь баш тоже не на пустом месте работает ну а как минимум и с помощью ядра и т.д. Я имел в виду что для решения поставленной задачи в данном окружении достаточно знание лишь одной утилиты.
zubastiy
for f in *AntiSpam.log; do let count+=$(grep -c URIBL_WS_SURBL $f);done && echo $count


Интересно, я сделал такой вариант и протестировал на нескольких файлах:
for f in $1; do let count+=$(grep -c $2 $f);done && echo $count
Ответ везде один и тот же - 5
wlad_o
Интересно, я сделал такой вариант и протестировал на нескольких файлах:
for f in $1; do let count+=$(grep -c $2 $f);done && echo $count
Ответ везде один и тот же - 5

Поменял $f на $1 и заработало...
может так ?
cat *AntiSpam.log* | grep URIBL_WS_SURBL | wc | awk '{print $1}'
 
Зарегистрироваться или войдите чтобы оставить сообщение.