के साथ perl
:
if perl -0777 -e '$n = <>; $h = <>; exit(index($h,$n)<0)' needle.txt haystack.txt
then echo needle.txt is found in haystack.txt
fi
-0octal
रिकॉर्ड परिसीमन को परिभाषित करता है। जब वह अष्टक संख्या 0377 (अधिकतम बाइट मान) से अधिक है, तो इसका मतलब है कि कोई सीमांकक नहीं है, यह करने के बराबर है $/ = undef
। उस स्थिति में, <>
किसी एकल फ़ाइल की पूर्ण सामग्री लौटाता है, वह है स्लुरप मोड ।
एक बार जब हमारे पास दो $h
और $n
चर में फ़ाइलों की सामग्री होती है , तो हम यह index()
निर्धारित करने के लिए उपयोग कर सकते हैं कि क्या एक दूसरे में पाया जाता है।
हालांकि इसका मतलब है कि पूरी फाइलें स्मृति में संग्रहीत हैं, जिसका अर्थ है कि यह विधि बहुत बड़ी फ़ाइलों के लिए काम नहीं करेगी।
Mmappable फ़ाइलों के लिए (आमतौर पर नियमित फ़ाइलें और ब्लॉक डिवाइस की तरह अधिकांश खोज योग्य फ़ाइलें), जो mmap()
फ़ाइलों पर उपयोग करके चारों ओर काम किया जा सकता है , जैसे कि Sys::Mmap
पर्ल मॉड्यूल:
if
perl -MSys::Mmap -le '
open N, "<", $ARGV[0] || die "$ARGV[0]: $!";
open H, "<", $ARGV[1] || die "$ARGV[1]: $!";
mmap($n, 0, PROT_READ, MAP_SHARED, N);
mmap($h, 0, PROT_READ, MAP_SHARED, H);
exit (index($h, $n) < 0)' needle.txt haystack.txt
then
echo needle.txt is found in haystack.txt
fi