bash, найди все строки в переменной - PullRequest
0 голосов
/ 27 апреля 2018

Я делаю сценарий для получения информации DAR из видеофайла. для этого я с успехом использую этот скрипт

DAR=$(ffmpeg -i "$DOSSIER/$OLD_NAME.$EXTENSION" -hide_banner 2>&1 | grep -i -oP "DAR [0-9]+:[0-9]+")
# if DAR not exist set it to 1
if [ -z "$DAR" ];
    then 
        DAR="DAR 1:1"
fi
X_DAR=$(echo "${DAR:4}" | cut -d: -f1)
Y_DAR=$(echo "${DAR:4}" | cut -d: -f2)

Моя главная проблема в том, что иногда видео имеют несколько DAR, поэтому мой вывод выглядит как

echo $DAR
DAR 16:9 DAR 5:4 DAR 234:211

оттуда мне потребуется наибольшее количество всех операций, доступных за DAR. и может быть доступно 2 DAR или 10.

есть идеи? спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Если вы хотите отсортировать по номеру, оставленному до :, сделайте следующее:

for((n=1;n<$(echo $DAR | wc -w)+1;n+=2)); do echo $DAR | cut -d' ' -f$n,$(($n + 1)); done | sort -k2 --numeric-sort -r | head -n1

Или, если вы хотите отсортировать его по номеру справа от :, то сделайте следующее:

for((n=1;n<$(echo $DAR | wc -w)+1;n+=2)); do echo $DAR | cut -d' ' -f$n,$(($n + 1)); done | sort -t: -k2 --numeric-sort -r | head -n1

Выход:

DAR 234:211

EDIT:

Теперь это сначала делит два числа, а затем сортирует их по результату.

for((n=1;n<$(echo $DAR | sed "s/ /\n/g" | wc -l)+1;n+=2)); do echo $DAR | cut -d' ' -f$n,$(($n + 1)); done | awk -F'[ :]' '{printf "%s %s:%s;%s\n",$1,$2,$3,$2/$3}' | sort -t';' -k2 --numeric-sort | tail -n1 | cut -d';' -f1
...