Próbuję znaleźć sposób, aby ustalić, czy plik tekstowy jest podzbiorem innego ..
Na przykład:
foo
bar
jest podzbiorem
foo
bar
pluto
Podczas:
foo
pluto
i
foo
bar
nie są podzbiorem ...
Czy można to zrobić za pomocą polecenia?
Ta kontrola musi być kontrolą krzyżową i musi zwrócić:
file1 subset of file2 : True
file2 subset of file1 : True
otherwise : False
Odpowiedzi:
Jeżeli te są nazywane zawartość pliku
file1
,file2
afile3
w kolejności apearance następnie można to zrobić za pomocą następującego jednej liniowej:źródło
in
operatora Pythona .Z
perl
:-0octal
definiuje ogranicznik rekordu. Kiedy ta liczba ósemkowa jest większa niż 0377 (maksymalna wartość bajtu), oznacza to, że nie ma separatora, jest to równoważne z działaniem$/ = undef
. W takim przypadku<>
zwraca pełną zawartość jednego pliku, to jest tryb slurp .Gdy mamy zawartość plików na dwie części
$h
i$n
zmienne, możemy użyć,index()
aby ustalić, czy jeden znajduje się w drugim.Oznacza to jednak, że całe pliki są przechowywane w pamięci, co oznacza, że metoda nie będzie działać w przypadku bardzo dużych plików.
W przypadku plików mmappable (zwykle obejmuje zwykłe pliki i najbardziej widoczne pliki, takie jak urządzenia blokowe), które można obejść za pomocą
mmap()
plików, takich jakSys::Mmap
moduł perla:źródło
Znalazłem rozwiązanie dzięki temu pytaniu
Zasadniczo testuję dwa pliki
a.txt
i zab.txt
pomocą tego skryptu:Jeśli jeden jest podzbiorem drugiego, skrypt powraca
0
wTrue
przeciwnym wypadku1
.źródło
%L
, to było trzy lata temu. Odman diff
(aktualna wersja)%L
oznacza „zawartość linii”.Jeśli f1 jest podzbiorem f2, to f1 - f2 jest pustym zestawem. Na tej podstawie możemy napisać funkcję is_subset i funkcję pochodną z niej. Zgodnie z Ustaw różnicę między 2 plikami tekstowymi
źródło
#!/bin/bash
?Od http://www.catonmat.net/blog/set-operations-in-unix-shell/ :
źródło