Как проанализировать вывод, чтобы проверить, совпадает ли строка?

Как проанализировать вывод, чтобы проверить, совпадает ли строка?

Испытание: Мне нужно проанализировать вывод команды imagemagick "identify", чтобы обнаружить наличие определенной строки. Если ее нет, то я вывожу имя файла на экран.

Фон: У меня примерно 100 тыс. изображений миниатюр (Пример миниатюры, которую необходимо проанализировать). Мне нужно проверить каждую миниатюру, чтобы убедиться, что она была отрисована правильно. К счастью, «отрисовано правильно» можно определить по наличию красных пикселей в миниатюре. Используя команду «identify» в imagemagick, я могу вывести цветовую карту, которая будет содержать строку «(255, 0, 0) #FF0000 red».

Нуждаться: Используя скрипт bash, я могу легко получить все имена файлов и перебрать их. Мне нужно выяснить, какмолчапроанализируйте вывод и найдите совпадение строки и выведите имя файла, если оно не найдено.

В частности, я хочу создать скрипт, который будет выполнять следующие действия:

1) находит все файлы *.png в определенном каталоге.

2) для каждого файла выполните «identify -verbose» имолчапередать вывод в...

3) проанализируйте вывод, чтобы увидеть, существует ли строка «(255, 0, 0) #FF0000 red».

3а) если это так, я молча перехожу к следующему файлу.

3б) если нет, я вывожу имя файла.

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

Любая помощь в создании этого скрипта будет полезна.большинствооценил.

решение1

Чтобы найти файлы, не имеющие красных пикселей:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' || echo $i; done

Чтобы найти файлы с красными пикселями:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' && echo $i; done

Команда gawk добавляет имя файла к каждой строке вывода команды identify. Использование fgrep вместо grep просто ищет точные совпадения текста (быстрее). Флаг -q для fgrep сообщает ей не выводить никаких строк; просто установить статус на успех или неудачу.

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

Связанный контент