Мне не хватает некоторых эпизодов сериала «Друзья», и я хотел бы знать, сколько файлов мне не хватает за сезон. Я хотел бы распечатать последнюю серию каждого сезона и количество файлов для каждого сезона.
Файлы имеют формат:
Friends S01E01 The Pilot.mkv
Friends S10E11 The One Where the Stripper Cries.mkv
Следующий сценарий bash будет работать:
#!/bin/bash
for i in {01..10}
do
ls Friends\ S$i* | tail -n 1
ls Friends\ S$i* | wc -l
printf "\n"
done
Это даст следующие результаты:
Friends S01E24 The One Where Rachel Finds Out.mkv
24
Friends S02E24 The One with Barry and Mindy's Wedding.mkv
24
Следующий сценарий bash / oneliner должен дать вам то, что вам нужно, с подробностями, потому что он может помочь, если у вас есть последний эпизод сезона, но более ранние эпизоды отсутствуют:
#!/bin/bash
ls Friends* | cut -c10-14 | \
awk -F'E' '{arr[$1]=arr[$1]" "$2; num[$1]++;} END { for (i in arr) printf "Season %s (%2d files) : %s\n", i, num[i], arr[i] }' | \
sort
Используя awk, массивы с индексом, являющимся номером сезона, увеличиваются для подсчета количества эпизодов, а также распечатывают список номеров эпизодов, чтобы вы могли легко увидеть, какие из них отсутствуют. Я использовал вырезку для столбцов с 10 по 14, потому что в этом случае мы можем с уверенностью предположить, что числа находятся там, где мы хотим.
Результат выглядит следующим образом:
Season 01 ( 9 files) : 01 02 03 04 05 06 07 08 09
Season 02 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 03 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 04 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 05 ( 9 files) : 01 03 04 05 06 07 08 09 10
Season 06 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 07 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 08 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 09 (10 files) : 01 02 03 04 05 06 07 08 09 10
Season 10 ( 7 files) : 01 02 03 04 05 06 10
Перед голосованием вниз помните, что вы можете ответить на свой вопрос "если вы хотите опубликовать документ, чтобы другие (включая вас) могли найти его позже".