https://www.domain.com/files/G5SPNDOF/AAA-1080p.mp4.html
https://www.domain2.com/dl/G5SPNDOF/JHCGTS/AAA-1080p.mp4.html
https://www.domain.com/files/ZQWL80BG/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
https://www.domain.com/files/UCIONEMA/BBB-1080p.mp4.html
위의 줄이 포함된 파일이 있는 경우 중복된 파일이 있지만 전체 링크가 다른 파일을 제거하려면 어떻게 해야 합니까?
https://www.domain.com/files/G5SPNDOF/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
답변1
awk 사용:
awk -F'/' '!seen[$NF]++' file
정렬을 사용하여 이 작업을 수행할 수도 있습니다. 파일에 변경된 필드가 많이 포함되어 있으므로 먼저 반전해야 합니다.
rev file | sort -u -t/ -k1,1 | rev
답변2
any를 사용하면 sed
"알려진 모든 파일 이름을 예약된 공간에 저장"하는 게으른 접근 방식을 선택할 수 있습니다.
sed 'G;\_/\(.*\)\n.*\1_d;P;s_.*/__;h;d' file
G
패턴 공간에 예약된 공간(알려진 모든 파일 이름 포함)을 추가합니다.- 패턴은 수집된 파일 이름( )에서 반복되는
/\(.*\)\n.*\1
개행 문자 사이에 파일 이름을 맞춥니다 . 이 경우 이를 제거하고 출력하지 않고 공백을 변경하지 않습니다./
\1
d
- 이 시점에서 우리는 새로운 단어를 찾았다는 것을 알고 있으므로
P
예약된 공간을 추가하지 않고 해당 줄을 인쇄합니다. s_.*/__
새 경로 목록을h
이전 공간에 복사할 수 있도록 경로를 제거합니다.d
추가 출력 억제
답변3
목록이 큰 경우 메모리에 있는 모든 파일 이름을 awk에 저장하지 마세요.
$ sort file | awk -F'/' '$NF != prev{print} {prev=$NF}'
https://www.domain.com/files/G5SPNDOF/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
https://www.domain.com/files/ZQWL80BG/AAA-1080p.mp4.html
그렇지 않으면 참조@MariusCuet의 awk 답변.
답변4
GNU를 사용하여 datamash
원본 데이터의 접두사로 각 URL에 기본 이름(끝에 있는 파일 이름)을 추가한 다음 추가된 열별로 데이터를 그룹화하고 각 그룹에서 첫 번째 URL을 추출합니다. 그런 다음 cut
파이프라인 끝에 추가된 필드를 제거합니다. 이것은 사람이 할 수 있는 일을 생각나게 한다슈워츠 변환.
$ datamash basename 1 cut 1 <file | datamash groupby 1 first 2 | cut -f 2
https://www.domain.com/files/G5SPNDOF/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
대신 얻을 수 있습니다마지막각 그룹의 URL:
$ datamash basename 1 cut 1 <file | datamash -s groupby 1 last 2 | cut -f 2
https://www.domain.com/files/ZQWL80BG/AAA-1080p.mp4.html
https://www.domain.com/files/UCIONEMA/BBB-1080p.mp4.html
...또는 임의의 것:
$ datamash basename 1 cut 1 <file | datamash -s groupby 1 rand 2 | cut -f 2
https://www.domain2.com/dl/G5SPNDOF/JHCGTS/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
$ datamash basename 1 cut 1 <file | datamash -s groupby 1 rand 2 | cut -f 2
https://www.domain.com/files/G5SPNDOF/AAA-1080p.mp4.html
https://www.domain.com/files/SVSRS0AD/BBB-1080p.mp4.html
$ datamash basename 1 cut 1 <file | datamash -s groupby 1 rand 2 | cut -f 2
https://www.domain.com/files/ZQWL80BG/AAA-1080p.mp4.html
https://www.domain.com/files/UCIONEMA/BBB-1080p.mp4.html