Estou tentando encontrar uma maneira de determinar se um arquivo de texto é um subconjunto de outro ..
Por exemplo:
foo
bar
é um subconjunto de
foo
bar
pluto
Enquanto:
foo
pluto
e
foo
bar
não são um subconjunto um do outro ...
Existe uma maneira de fazer isso com um comando?
Essa verificação deve ser uma verificação cruzada e deve retornar:
file1 subset of file2 : True
file2 subset of file1 : True
otherwise : False
Respostas:
Se esses conteúdos de arquivo são chamados
file1
,file2
efile3
a fim de apearance então você pode fazê-lo com o one-liner seguinte:fonte
in
operador do Python .Com
perl
:-0octal
define o delimitador de registro. Quando esse número octal é maior que 0377 (o valor máximo de bytes), significa que não há delimitador, é equivalente a fazer$/ = undef
. Nesse caso,<>
retorna o conteúdo completo de um único arquivo, que é o modo slurp .Uma vez que tenhamos o conteúdo dos arquivos em dois
$h
e$n
variáveis, podemos usarindex()
para determinar se um é encontrado no outro.Isso significa, no entanto, que os arquivos inteiros são armazenados na memória, o que significa que esse método não funcionará para arquivos muito grandes.
Para arquivos mmappable (geralmente inclui arquivos regulares e os arquivos mais procuráveis, como dispositivos de bloco), isso pode ser contornado usando
mmap()
os arquivos, como noSys::Mmap
módulo perl:fonte
Encontrei uma solução graças a esta pergunta
Basicamente, estou testando dois arquivos
a.txt
eb.txt
com este script:Se um é um subconjunto do outro, o script retorna
0
para oTrue
contrário1
.fonte
%L
disso, foi há três anos. Deman diff
(versão atual)%L
significa "conteúdo da linha".Se f1 é um subconjunto de f2, então f1 - f2 é um conjunto vazio. Com base nisso, podemos escrever uma função is_subset e uma função derivada dela. Conforme definido Diferença entre 2 arquivos de texto
fonte
#!/bin/bash
?Em http://www.catonmat.net/blog/set-operations-in-unix-shell/ :
fonte