Я пытаюсь найти способ определить, является ли текстовый файл подмножеством другого ..
Например:
foo
bar
это подмножество
foo
bar
pluto
Пока:
foo
pluto
и
foo
bar
не являются подмножеством друг друга ...
Есть ли способ сделать это с помощью команды?
Эта проверка должна быть перекрестной проверкой и должна возвращаться:
file1 subset of file2 : True
file2 subset of file1 : True
otherwise : False
Ответы:
Если это содержимое файла называются
file1
,file2
иfile3
в порядке apearance , то вы можете сделать это с помощью следующего однострочника:источник
in
оператора Python .С
perl
:-0octal
определяет разделитель записи. Если это восьмеричное число больше 0377 (максимальное значение байта), это означает, что разделителя нет, это эквивалентно действию$/ = undef
. В этом случае<>
возвращает полное содержимое одного файла, это режим slurp .После того, как мы имеем содержание файлов в двух
$h
и$n
переменных, мы можем использовать ,index()
чтобы определить , если один находится в другом.Это означает, однако, что все файлы хранятся в памяти, что означает, что метод не будет работать для очень больших файлов.
Для файлов mmappable (обычно включает обычные файлы и наиболее доступные для поиска файлы, например блочные устройства), которые можно обойти, используя
mmap()
файлы, как вSys::Mmap
модуле perl:источник
Я нашел решение благодаря этому вопросу
В основном я тестирую два файла
a.txt
иb.txt
с помощью этого скрипта:Если один подмножество другого возвращения сценария
0
дляTrue
иначе1
.источник
%L
, это было три года назад. Сman diff
(текущая версия)%L
означает «содержимое строки».Если f1 является подмножеством f2, то f1 - f2 - пустое множество. Основываясь на этом, мы можем написать функцию is_subset и функцию, полученную из нее. В соответствии с разницей между двумя текстовыми файлами
источник
#!/bin/bash
?С http://www.catonmat.net/blog/set-operations-in-unix-shell/ :
источник