awk -Удалить строку, если определенный столбец содержит в качестве подстроки элемент из другого текстового файла

Что ж, над всем этим решением нужно немного поработать, то, что я сделал, было очень просто, 1)

  1. зашел в нужную папку и щелкнул правой кнопкой мыши -> открыть другим приложение

  2. Затем выберите медиаплеер VLC,

  3. при этом начнется воспроизведение одного из видео, но затем

  4. нажмитеctrl + L , и вы увидите список воспроизведения видео, а где-то в левом верхнем углу вы увидите общую продолжительность

вот пример

1.List item

2.enter image description here

3.enter image description here

Вы можете видеть прямо под панелью инструментов, там написано Playlist[10 :35 :51] , поэтому папка содержит 10 часов 35 минут и 51 секунду общей продолжительности видео

0
03.02.2021, 16:19
2 ответа

Вот несколько вариантов, которые вы можете попробовать -и все они основаны на построении ассоциативного массива из второго файла, а затем проверке его элементов на соответствие последнему полю первого файла с прерыванием работы, как только будет найдено совпадение:

  1. Истинное совпадение подстроки

    awk -F'\t' 'NR==FNR{a[$1]; next} {for(i in a) {if(index($NF,i)>0) next}} 1' File2 File1
    

    Обратите внимание, что (, например ), это идентифицирует Cj0012cкак подстроку ABCj0012cи/или Cj0012cdef

    .
  2. Аналогично описанному выше, но элементы дополняются одним пробелом с обеих сторон для предотвращения частичного совпадения слов

    awk -F'\t' 'NR==FNR{a[$1]; next} {for(i in a) {if(index($NF," "i" ")>0) next}} 1' File2 File1
    

    (вместо этого вы можете дополнить строку внутри вызова присваивания массива, т.е. a[" "$1" "], если хотите)

  3. (вероятно, требует, чтобы GNU awk )использовал сопоставление регулярных выражений с шаблонами, состоящими из строк из File2, окруженных якорями границ слов

    gawk -F'\t' 'NR==FNR{a[$1]; next} {for(i in a) {if($NF ~ "\\<" i "\\>") next}} 1' File2 File1
    

    Потенциальная проблема с этой версией заключается в том, что если элементы File2могут содержать метасимволы регулярного выражения, -их нужно будет каким-то образом экранировать.

2
18.03.2021, 22:32

Немного перла:

perl -MList::Util=any -Mautodie -F'\t' -ane '
    BEGIN { open $f, "<", shift @ARGV; chomp(@exclusions = <$f>); }
    print unless any {$F[-1] =~ /\b\Q$_\E\b/} @exclusions; 
' file2 file1

Строка НАЧАЛО в файле со списком исключенных токенов обрывается.
Строка печати отфильтровывает строки, которые соответствуют любой из них.

2
18.03.2021, 22:32

Теги

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