我可以获得youtube播放列表中每个文件的文件大小,但如何将所有单独的文件大小相加,以获得所有文件加在一起的总大小(MB或GB(?
示例:Linux/Uubuntu命令
youtube-dl --get-filename -o "File size for %(id)s (%(format_id)s): %(filesize)s = 125*%(duration)s*%(tbr)s" -f "22/best" --ignore-config "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A" | (IFS='='; while read -r a b; do echo "$a = $(echo "$b" | bc)"; done)
File size for b26ZBgspv7M (22): NA = 632016.000
File size for nPr3qtZ5FVE (18): NA = 47577837.000
File size for 8FCsS6s1Z0k (18): NA = 67788616.500
File size for TZANoOWFX1M (18): 62402644 = 62393587.750
File size for XA5eobevGv8 (22): NA = 117960449.500
File size for lDplUpPoCcI (22): NA = 175676293.75
File size for a7TUIkn3qjY (22): NA = 299391049.125
File size for HFPObieGamg (22): NA = 270756696.875
File size for PiiDs8dzSXk (22): NA = 55946363.250
File size for tth0p7nK18A (22): NA = 31281180.00
File size for Z_xj9ZTV8ak (22): NA = 126366879.000
File size for Y_YHqM5nTHA (22): NA = 42328527.000
File size for BjV-fRCPgAM (22): NA = 42225633.375
您似乎已经知道如何分割输入了——只需对其求和即可。
youtube-dl ..... | (
sum=0
while IFS='=' read -r a b; do
sum=$(echo "$sum + $b" | bc)
done
echo "The sum: $sum"
)
对awk
感兴趣,它是一个非常方便的工具。您可以搜索";如何在awk中求和列;你肯定会得到很多例子。
您几乎完成了:
youtube-dl ...args... |
{ while IFS='=' read -r a b; do printf '%s + ' "$b"; done; echo 0; } | bc
或者使用cut
和tr
:
youtube-dl ...args... |
{ cut -d= -f2 | tr 'n' +; echo 0; } | bc
或使用sed
youtube-dl ...args... |
sed 's/.*=//;H;$!d;g;s/.//;s/n/+/g' | bc
编写整个算法以提供给bc
:
#!/usr/bin/env sh
echo "125*(0$(youtube-dl --get-filename -o "+(%(duration)s*%(tbr)s)" -f "22/best" --ignore-config "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A"))" |
{ tr -d 'n'; echo;} |
bc -l
首先打印125*(0
然后CCD_ 7打印连续的CCD_,则添加尾随的CCD_ 9导致类似于:
125*(0+(duration*tbr)
+(duration*tbr)
+(duration*tbr)
)
为了将其转换为有效的bc
计算语法,需要使用tr -d 'n'
丢弃换行符,并使用echo
添加最后一个换行符
包括单个文件大小,最后加上总和。
youtube-dl --get-filename -o "File size for %(id)s (%(format_id)s): %(filesize)s = 125*%(duration)s*%(tbr)s" -f "22/best" --ignore-config "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A" | (
sum=0
while IFS='=' read -r a b; do
echo "$a = $(echo "$b" | bc)"
sum=$(echo "$sum + $b" | bc)
done
echo "The sum: $sum"
)
输出:
File size for b26ZBgspv7M (22): NA = 632016.000
File size for nPr3qtZ5FVE (18): NA = 47577837.000
File size for 8FCsS6s1Z0k (18): NA = 67788616.500
File size for TZANoOWFX1M (18): 62402644 = 62393587.750
File size for XA5eobevGv8 (22): NA = 117960449.500
File size for lDplUpPoCcI (22): NA = 175676293.75
File size for a7TUIkn3qjY (22): NA = 299391049.125
File size for HFPObieGamg (22): NA = 270756696.875
File size for PiiDs8dzSXk (22): NA = 55946363.250
File size for tth0p7nK18A (22): NA = 31281180.00
File size for Z_xj9ZTV8ak (22): NA = 126366879.000
File size for Y_YHqM5nTHA (22): NA = 42328527.000
File size for BjV-fRCPgAM (22): NA = 42225633.375
The sum: 1340325129.125