누락된 숫자 찾기

누락된 숫자 찾기

이름(동영상)이 포함된 파일 목록이 많이 있습니다.

모든 파일 이름을 텍스트 파일에 쓸 수 있었습니다. 이제 파일 이름이 많은 텍스트 파일이 있습니다(한 줄에 에피소드 1개). 이제 해당 텍스트 파일을 읽고 E누락된 에피소드 번호를 알려줄 수 있는 것이 필요합니다.

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

다음은 목록의 예입니다.

S1-E1-20100526-title-of-video-1400316375.mp4
S1-E3-20100517-title-of-video-15457547.mp4
S10-E5-20100421-title-of-video-14467457.mp4
S5-E7-20120912-title-of-video-17467457.mp4

이 경우 파일 S1-E2과 파일 S10-E4이 누락되었음을 쉽게 알 수 있습니다. 하지만 큰 목록이 있으면 누락된 파일을 어떻게 찾을 수 있나요? (시즌 번호 남기기 ) 에피소드 번호를 의미하는지 S1, S2확인하면 됩니다.E

가장 큰 기존 파일 번호는 이고 S50-E2184, 가장 작은 기존 파일 번호는 다음과 같습니다.S1-E1

답변1

모든 이름을 "file_with_list_of_files"라는 파일에 저장하고 linux/unix 터미널에서 아래 명령을 실행합니다[Mac 터미널에서 시도했습니다]:

cat file_with_list_of_files | sed 's/^[A-Z][0-9]*-//g' | grep -v "^E"

-- 또는 --

cat file_with_list_of_files | awk -F- '{print $2}' | grep -v "^E"

여기에는 첫 번째 -(하이픈) 뒤에 E가 없는 모든 파일 이름이 나열됩니다. 다른 더 좋은 방법을 찾을 수도 있습니다.

답변2

  1. 모든 에피소드 서명이 포함된 파일을 준비하세요. 각 시즌에 몇 개의 에피소드가 있는지는 알려주지 않았지만 분명히 알아야 합니다. 파일을 준비하는 방법은 다음과 같습니다.

    >all_episodes   # just to empty the file which may or may not exist
    printf 'S1-E%s\n'  {1..3}    >>all_episodes   # 3 episodes in season 1
    printf 'S2-E%s\n'  {1..5}    >>all_episodes   # 5 episodes in season 2
    printf 'S3-E%s\n'  {1..8}    >>all_episodes
    # and so on
    printf 'S50-E%s\n' {1..2184} >>all_episodes
    

    이는 각 시즌이 자체 에피소드 1로 시작한다고 가정합니다(질문이 명확하지 않습니다). 파일은 형식의 행으로 구성됩니다 S<n>-E<m>(예: S2-E3.

  2. 동일한 형식으로 소유한 에피소드 파일을 만듭니다.

    cut -d - -f -2 your_current_list >owned_episodes
    

    이 명령 -구분자를 사용하여 라인 조각을 다음까지 반환합니다.에프현재 목록에서 2번을 입력하세요.

  3. owned_episodes패턴으로 처리 하고 all_episodes패턴이 없는 줄을 찾으려면 필터를 사용하세요.

    grep -vxFf owned_episodes all_episodes
    

    -x여기서는 사용합니다 . 요점은 S50-E3일치해서는 안된다는 것 입니다 S50-E31. -F귀하의 경우에는 필요하지 않지만일반적으로고정 문자열을 제공하는 동안 사용해야 합니다. 그만큼옵션이다:

    -F
    고정 문자열을 사용하여 일치시킵니다. 지정된 각 패턴을 정규식 대신 문자열로 처리합니다. [...]

    -f pattern_file
    pathname 으로 명명된 파일에서 하나 이상의 패턴을 읽습니다 pattern_file. [...]

    -v
    지정된 패턴과 일치하지 않는 행을 선택하십시오. [...]

    -x
    전체 고정 문자열과 일치하는 종료 문자를 제외하고 줄의 모든 문자를 사용하는 입력 줄 <newline>또는 일치하는 줄인 정규식만 고려하십시오.

관련 정보