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