bash,查找一个var中的所有字符串

bash, find all strings in a var

我正在制作脚本以从视频文件中获取 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 个。

有什么想法吗? 谢谢

如果你想按 : 剩下的数字排序,那么这样做:

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

编辑:

现在这首先将两个数字相除,然后根据结果对它们进行排序。

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",,,,/}' | sort -t';' -k2 --numeric-sort | tail -n1 | cut -d';' -f1