Как сделать двойной grep с условием в bash скрипте?
есть файлы с содержимым:
файл 1:
a=xxx
b=yyy
c=zzz
файл 2:
a=xxxx
b=yyyy
c=zzzz
и т.д.
нужен скрипт с grep который вытащит из файлов значения a и b, и запишет их в новый файл. Записать значения из одного файла в одну строчку, разделив каким-нибудь символом типа:
xxx-yyy
xxxx-yyyy
и т.д.
с условием, что если какой-то файл не содержит один из шаблонов (a или b):
не очень понял смысла условия.
c=zzzz и так далее не волнует совсем или непонял?
Можно же просто первые две строчки из файлов считывать
Или что значит файл не содержит один из шаблонов, это как? Сперва прочитать все файлы, а потом вычислять какие из них не содержат ранее считанные шаблоны?
Я ничего не понял. Проще пример файлов и пример файла-результата
Saboteur, товарищ AUser0 уже подсказал верное решение. Теперь я не могу додуматься как не заглядывать во все файлы в системе, а только в те, названия которых начинаются с "file", например file1.txt, file2.txt, ..., file2022.txt
Saboteur, кстати, в вопросе я немного оподливился, ведь файлы могут содержать поле "a=" но без значения, и тогда это условие if [ -n "${a}" -a -n "${b}" ]; уже не работает так, как надо.
мне нужно условие, которое при парсинге найдет хоть какое-то значение у "a=" и "b=" в файле, в противном случае никаких данных оттуда не парсить.
Не могли бы дать маленькую подсказку, если нужные мне файлы раскиданы по всей системе, но начинаются с одинакового слова "file", например file1.txt, file2.txt и тд, как мне задать поиск? чтобы не во все файлы заглядывать?
AUser0, ваш код сработал после того как добавил критерий поиска по размеру файла.
бывает в файле $a $b $c определены, но $a встречается 2 раза, оба имеют значения, как в таком случае добавить пробел между результатами? никак не получается, если здесь, то что добавить нужно? c=$(grep -aohPR '(?<=Center Y= )\d+' $file)
сейчас результат a=xxx a=yyy выглядит так: xxxyyy. ожидание: xxx yyy