Печатается любая строка, содержащая «.pdf», если предыдущая строка начинается с -
.
[me@home]$ awk '{if (st && match($0,".pdf")){print $0}; st=match($0,"^-")}' in.txt
/home/user1/Documents/temp1.pdf
/home/user1/Documents/temp2.pdf
Это не общее решение, но оно будет работать с введенными вами входными данными.Я могу представить несколько крайних случаев, когда это может не сработать, но все зависит от спецификаций вашего входного файла.
Обновление
(на основе сценария, который вы разместили в комментарияхниже) Если то, что вы пытаетесь сделать, это просто определить PDF-файлы, которые не имеют встроенных шрифтов, это может сработать:
MAGNUM="/mnt/network/User\ 1\ PDF\ 06.12.11/"
has_no_fonts() {
COUNT=$(pdffonts "$1" 2> /dev/null | wc -l)
exit $(( $COUNT - 4 ))
}
export -f has_no_fonts
find "$MAGNUM" -type f -name "*.pdf" -exec bash -c 'has_no_fonts "{}"' \; -print
Вот разбивка сценария:
Определение количества встроенных шрифтов.Было бы просто, если бы pdffonts
вернул конкретное значение, если бы не было встроенных шрифтов, но это не так.Поэтому мы подсчитываем количество выходных строк и вычитаем 2 (строки заголовка), чтобы определить количество встроенных шрифтов
COUNT=$(pdffonts "$1" 2> /dev/null | wc -l) # number of output lines
# exactly 2 if no fonts
# exactly 0 if there are errors
exit $(( $COUNT - 2 )) # exit 0 (success) if and only if PDF has no fonts
экспортированная функция bash, чтобы ее можно было использовать в подоболочке.
export -f has_no_fonts
Найдите файлы PDF и распечатайте имя только в том случае, если PDF допустим и не содержит шрифтов
find ..... -exec bash -c 'has_no_fonts "{}"' \; -print
------- -------
| |
-exec cannot run bash functions Will only print
so run in a bash subshell filename if prev command exit with 0
Если вы предпочитаете однострочноеВесь сценарий можно записать так:
find "$MAGNUM" -name "*.pdf" \
-exec bash -c 'exit $(($(pdffonts "{}" 2> /dev/null |wc -l) - 2))' \; -print