首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找丢失的数字

查找丢失的数字
EN

Ask Ubuntu用户
提问于 2018-11-21 09:35:40
回答 2查看 864关注 0票数 2

我有一大串像这样名字的有序文件(视频)。

代码语言:javascript
复制
S1-E18-(Date)-(Title)-(Random numbers).mp4

下面是列表的示例

代码语言:javascript
复制
S1-E1-20100526-title-of-video-1400316375.mp4
S1-E3-20100547-title-of-video-15457547.mp4
S10-E5-20100463-title-of-video-14467457.mp4

在这种情况下,很容易看到文件S1-E2S10-E4丢失了。但如果我有一个大名单,那我怎么找到丢失的文件。(离开季号S1, S2)只需查一查E的意思

最大的现有文件号是S50-E2184,最小的现有文件号是S1-E1

EN

回答 2

Ask Ubuntu用户

发布于 2018-11-22 07:32:49

使用awk:

代码语言:javascript
复制
$ awk -F- '{n = substr($2, 2)} (n - prev) != 1 {for (i = prev + 1; i < n; i++) print i} {prev = n}' input-file
2
4
  • -F -将字段分隔符设置为- (因此S1E1等成为不同的字段)。
  • 然后,我们从第二个字段($2)中提取除第一个字符之外的所有内容,从而提取插集号(D10)。
  • 如果该集号不是前一集+1( (n - prev) != 1),我们打印所有的数字在两者之间。
  • 我们将当前的插集号保存在prev中,以便进行下一次迭代。

如果未对输出进行排序,则拆分提取并检查在以下两项中插入sort

代码语言:javascript
复制
awk -F- '{print substr($2, 2)}' input-file | sort -n | awk '{n=$1} (n - prev) != 1 {for (i = prev + 1; i < n; i++) print i} {prev = n}'
票数 3
EN

Ask Ubuntu用户

发布于 2018-11-22 08:09:30

更直接一点的剧本。脚本假定上一集存在并提取其集号。然后,它迭代和检查所有插曲之间的存在。注意,这不适用于以前导零编号的剧集。

代码语言:javascript
复制
#!/bin/bash

if [ -z "$1" ]; then
    echo "please specify season prefix"
fi

# extract last episode number
last=`ls $1-*.* -1 --reverse | head -n 1 | grep --only-matching "E[[:digit:]+]" | cut -c 2-`

for ((i=1; i<=$last; i++)); do
    if [ ! -f $1-E$i-*.* ]; then
        echo "missing episode $i"
    fi
done

脚本使用季节前缀作为其第一个参数,即S1

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1094741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档