我有很多(包括17,000个)包含链接的html文件。每个html文件可以包含许多链接,但是它们都引用相同的视频mp4,但分辨率不同。我只想grep出最高分辨率的链接,即。如果有对720、1080或1440的引用,则我希望1440的链接不干扰其他链接。不过,最大分辨率有所不同,因此我不能仅对1440进行硬编码(例如,一个html文件中的最大分辨率可能是720,例如另一个1440中的最大分辨率)。
每个html文件的内容在2k到80k之间,并具有重复的内容,这种内容具有这种结构,有时一行,有时跨越多行
{"url":"https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01",
uploadedBy="fdb778f8-c347-4c28-90f4-d8be4b4a20f0",
owner="3ba62dba-8fb1-468d-8349-2e42a5330785",video="1024p",
group="a4307f09-4804-4802-9ba4-8e8eaf3d3439"},
{"url":"https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01",
uploadedBy="fdb778f8-c347-4c28-90f4-d8be4b4a20f0",
owner="3ba62dba-8fb1-468d-8349-2e42a5330785",
video="720p", group="a4307f09-4804-4802-9ba4-8e8eaf3d3439"}
我想要的grep就是
https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
“不”(因为这是较低的分辨率,单个文件中的最高分辨率为i 1024,较低的是720)
https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
我只是无法使用grep -oh和'\“ url \”:\“ https://localhost[ ^”] *
解决方案我认为我需要做的是获取所有网址,然后将video =,按网址排序,然后将视频从最高到最低排序,然后排在最前,但是.....我不知道,现在只是尝试尝试在Google上找到的任何内容并进行更改。
有人可以帮忙吗?
哦,mp4总是出现在视频质量之前
我正在使用Darwin MacBook-Pro.local 18.6.0 Darwin Kernel版本18.6.0:PDT 2019年4月25日23:49:07;根目录:xnu-4903.261.4〜4 / RELEASE_X86_64 x86_64
答案 0 :(得分:2)
使用标准UNIX工具,包括在任何UNIX盒上的任何shell中的任何awk:
$ cat tst.awk
BEGIN { OFS="\t" }
{
while ( match($0,/("url":|[[:alpha:]]+=)"[^"]+"/) ) {
tag = val = substr($0,RSTART,RLENGTH)
$0 = substr($0,RSTART+RLENGTH)
sub(/[:=].*/,"",tag)
sub(/[^:=]*[:=]/,"",val)
gsub(/^"|"$/,"",tag)
gsub(/^"|"$/,"",val)
f[tag] = val
if ( tag == "video" ) {
print f["video"], f["url"]
}
}
}
。
$ awk -f tst.awk file
1024p https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
720p https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -n
720p https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
1024p https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn
1024p https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
720p https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn | head -1
1024p https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn | head -1 | cut -f2
https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
它所依赖的是任何给定的tag = value字符串本身都不是跨行的,它们都遵循您在问题中显示的格式。