Результат 1 массив с значениями
data=$(ffmpeg -i /video.mp4 -vf cropdetect -f null - 2>&1 |
awk \'/crop=/ {time=$(NF-2); crop=$NF} END {print time, crop}\')
echo $data | cut -d" " -f1
echo $data | cut -d" " -f2
Результат
t:49.960000
crop=1920:1072:0:4
Пробую сразу получить результат в качестве массива
eval declare -A data=(`ffmpeg -i /video.mp4 -vf cropdetect -f null - 2>&1 |
awk \'/crop=/ {time=$(NF-2); crop=$NF}
END {print "[time]=" time,
"[crop]=" crop}\'`)
echo ${data[time]}
Не выходит, пустой результат, какие варианты не перепробовал...
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Я бы генерировал в awk скрипт, который объявляет переменную и явно присваивает элементы массива:
BEGIN { print "unset data; declare -A data;" }
/crop=/ {time=$(NF-2); crop=$NF}
END {
print "data[time]="time";";
print "data[crop]="crop";"
}
bash этот скрипт выполняет в eval
, от чего в нём появляется массив data
:
#!/bin/bash
function input {
ffmpeg -i ./video.mp4 -vf cropdetect -f null - 2>&1
}
function handle {
awk '
BEGIN {
print "unset data; declare -A data;"
}
/crop=/ {time=$(NF-2); crop=$NF}
END {
print "data[time]="time";"
print "data[crop]="crop";"
}
'
}
script=$( input | handle )
eval "$script"
for key in "${!data[@]}"; do
val="${data[$key]}"
echo "\$data[$key] = $val"
done
Результат:
$data[time] = pts:1496648
$data[crop] = crop=1280:720:0:0