Поиск файла PDF и добавление строки к имени файла

awk -F'(' '{print $NF}' file | sed 's/)//g'
0
22.10.2019, 15:36
1 ответ

Ответ на ваш вопрос зависит от того, может ли эта строка появляться только один раз или несколько раз в рассматриваемом PDF-файле (с ). Предполагая, что это может произойти только один раз, и рассматриваемая строка содержится как фактический текст (, т.е. не только в графической форме )следующий подход, который требует GNU Awk и внешнего инструмента pdftotext, должно работать (пример для одного файла, переданного в качестве параметра):

#!/bin/bash

OLDNAME="$1"

NUMBER="$(pdftotext "$OLDNAME" - | awk '/R E A D I N G/ {match($0,"R E A D I N G ([[:digit:]])( [[:digit:]])*",a); gsub(" ","",a[2]); print a[1] a[2];}')"

NEWNAME="$NUMBER.$OLDNAME"
mv "$OLDNAME" "$NEWNAME"

Функция matchфункции awkпроверяет наличие определенного паттерна и выводит «фактическое значение» паттерна в выходной массив a, где записи a[0]содержат весь найденный паттерн и a[1]- a[n]содержат «фактические значения» любых вложенных -выражений, заключенных в круглые скобки в шаблоне, в нашем случае «числовая часть» ([[:digit:]])( [[:digit:]])*в элементах массива 1 и 2 (ср. например. раздел GNU Awk User's Guide, посвященный «строковым функциям»). Если результат однозначный -, число a[2]останется пустым, что не имеет значения. Поскольку в случае двух цифр -пробел между цифрами также будет совпадать, мы используем функцию awkgsub(), чтобы удалить его в случае двух цифр -.

Чтобы применить его к нескольким файлам, вы можете изменить сценарий следующим образом, а затем передать весь список PDF-файлов в качестве аргумента (, например./rename.sh *.pdf).

#!/bin/bash

for OLDNAME in "$@"
do
    NUMBER="$(pdftotext "$OLDNAME" - | awk '/R E A D I N G/ {match($0,"R E A D I N G ([[:digit:]])( [[:digit:]])*",a); gsub(" ","",a[2]); print a[1] a[2];}')"

    NEWNAME="$NUMBER.$OLDNAME"
    mv "$OLDNAME" "$NEWNAME"
done
0
28.01.2020, 03:10

Теги

Похожие вопросы