Поиск недостающих номеров [закрыто]

У меня большой список заказанных файлы с таким именем (видео)

S1-E18-(Date)-(Title)-(Random numbers).mp4

Вот пример списка

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-E2 и S10-E4 являются отсутствует. но если у меня большой список, как мне найти недостающие файлы. (Оставьте номер сезона S1, S2 ) просто нужно проверить E означает номер эпизода

Самый большой из существующих файлов - S50-E2184 и Самый маленький из существующих файлов - S1-E1

2
задан 22 November 2018 в 10:20

2 ответа

Используя awk:

$ 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 - устанавливает разделителя полей на - (так S1, E1, и т.д. станьте различными полями).
  • Затем мы извлекаем число эпизода (n = substr($2, 2)), путем взятия всего кроме первого символа от второго поля ($2).
  • Если число эпизода не является предыдущим эпизодом + 1 ( (n - prev) != 1), мы печатаем все промежуточные числа.
  • Мы сохраняем текущее число эпизода в prev для следующего повторения.

Если вывод не отсортирован, разделите извлечение и проверку для вставки a sort промежуточный:

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
ответ дан 2 December 2019 в 02:12

Немного больше прямого сценария. Сценарий предполагает, что последний эпизод существует и извлекает свое число эпизода. Затем это выполняет итерации по [1.. в последний раз] и проверка существование всех промежуточных эпизодов. Обратите внимание, что это не работало бы на эпизоды, пронумерованные с продвижением, обнуляет.

#!/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
ответ дан 2 December 2019 в 02:12

Другие вопросы по тегам:

Похожие вопросы: