Saya mencoba menemukan cara untuk menentukan apakah file teks adalah bagian dari yang lain ..
Sebagai contoh:
foo
bar
adalah bagian dari
foo
bar
pluto
Sementara:
foo
pluto
dan
foo
bar
bukan bagian dari satu sama lain ...
Apakah ada cara untuk melakukan ini dengan perintah?
Pemeriksaan ini harus berupa pemeriksaan silang, dan harus dikembalikan:
file1 subset of file2 : True
file2 subset of file1 : True
otherwise : False
Jawaban:
Jika isi file tersebut dipanggil
file1
,file2
danfile3
dalam urutan penampilan maka Anda dapat melakukannya dengan satu-baris berikut:sumber
in
operator Python .Dengan
perl
:-0octal
mendefinisikan pembatas rekaman. Ketika angka oktal lebih besar dari 0377 (nilai byte maksimum), itu berarti tidak ada pembatas, itu setara dengan melakukan$/ = undef
. Dalam hal ini,<>
mengembalikan konten lengkap dari satu file, itulah mode slurp .Setelah kami memiliki konten file dalam dua
$h
dan$n
variabel, kita dapat menggunakanindex()
untuk menentukan apakah satu ditemukan di yang lain.Namun itu berarti bahwa seluruh file disimpan dalam memori yang berarti metode itu tidak akan berfungsi untuk file yang sangat besar.
Untuk file mmappable (biasanya termasuk file biasa dan file yang paling dicari seperti perangkat blok), yang dapat dikerjakan dengan menggunakan
mmap()
pada file, seperti denganSys::Mmap
modul perl:sumber
Saya menemukan solusi berkat pertanyaan ini
Pada dasarnya saya menguji dua file
a.txt
danb.txt
dengan skrip ini:Jika satu bagian dari yang lain skrip kembali
0
untukTrue
sebaliknya1
.sumber
%L
, itu tiga tahun lalu. Dariman diff
(versi saat ini)%L
berarti "isi baris".Jika f1 adalah himpunan bagian dari f2 maka f1 - f2 adalah himpunan kosong. Berdasarkan itu kita dapat menulis fungsi is_subset dan fungsi yang diturunkan darinya. Sesuai Tetapkan perbedaan antara 2 file teks
sumber
#!/bin/bash
?Dari http://www.catonmat.net/blog/set-operations-in-unix-shell/ :
sumber