Я боролся с этим уже несколько дней и не могу найти хорошее решение (или даже инструменты, которые можно использовать для продвижения вперед).
У меня около 5 тыс. Строк (в текстовом формате файл), как это:
РЕДАКТИРОВАТЬ - Я ЗАБЫЛ ДОБАВИТЬ, что некоторые строки имеют пробелы и одинарные кавычки / апострофы, поэтому я пересмотрел пример набора ниже. (пробелы отбрасывали некоторые из моих предыдущих усилий, добавлю это в качестве комментария об этом)
L:\folder7\video.1080p.disk.avi
L:\folder8\video3 cat 720p.img.mkv
L:\folder9\video.720p disk.avi
L:\folder0\video6.720p.img.mkv
L:\folder2\video's 1080p.disk.avi
L:\folder6\video2.1080p.img.mkv
разрывы строк - это разделители (или 2x разрывы строк (/ n / n) это разделитель, который я должен сказать)
Моя цель:
if line1 contains 1080p and line2 contains 720p, then delete the 720p line (line2)
if line1 contains 1080p and line2 contains 1080p, then delete both lines
if line1 contains 1080p and line2 contains 1080p, then delete both lines
(and the reverse)
if line1 contains 720p and line2 contains 1080p, then delete the 720p line (line1)
Я в порядке, разбив это на ручные операции вручную (ie через несколько ручных операций grep / perl / notepad +++> (запускается temp.txt), в отличие от написания сценария if / elseif или Case, bash для выполнения этого за один прогон.
Я боролся (и читал тонны из Google / здесь), при использовании разрывов строк с помощью grep (даже с -o или с использованием tr '\ n' ';' и позже tr ';' '/ n') У меня также были проблемы с использованием регулярных выражений, которые отлично работают на регулярных выражениях regex101 .com, но не с egrep или perl.
Может кто-нибудь предложить какие-то предложения или указать мне в правильном направлении? спасибо
edit / final: см. мой выбранный ответ для объяснения , для тех, кому интересно, это последний awk, который я использовал (мой ввод был .txt файл из windows Приложение под названием «Duplicate Mov ie Finder для Plex», с ~ 5k строк), этот отличный awk сравнивает / n / n разделенные строки или записи и приблизительно выбирает файл более низкого качестваPath / duplicate mov ie.
I затем возьмите выходные данные этой команды awk, добавьте Del "путь" и запустите список через windows CMD (чтобы удалить дубликат низкого качества).
The {print $ 2; next} позволяет awk останавливать дальнейшую обработку и печатать правильную строку, если он находит файл h265 или hev c (поскольку я не хочу их удалять, ie: в случае, когда есть 2x строки 1080p, но одна из них является х c). Кстати, это требует много ручной проверки, прежде чем добавить / запустить команду Del. (не просто копировать / вставлять)
awk -v RS= -v FS='\n' '$1 ~ /265/ && $2 ~ /1080p/ { print $2 ; next } $1 ~
/1080p/ && $2 ~ /265/ { print $1 ; next } $1 ~ /HEVC/ && $2 ~ /1080p/ { print
$2 ; next } $1 ~ /1080p/ && $2 ~ /HEVC/ { print $1 ; next } $1 ~ /1080p/ &&
$2 ~ /720p/ { print $2 } $1 ~ /720p/ && $2 ~ /1080p/ { print $1 } $1 ~
/1080p/ && $2 ~ /1080p/ { print $2 } $1 ~ /720p/ && $2 ~ /720p/ { print $1 }'
plex_dups_v4.txt