पाठ निष्कर्षण क्वेरी


-1

मेरे पास नीचे दिखाए गए उदाहरण के समान एक पाठ फ़ाइल है:

139
text string
text string
text string
text string
text string
text string

139
fdghdfkljsghaksjgh
fdkdsjahgks
fklsdjghlksdjh
jksdgh

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

मैं सभी पाठों के बीच 139-s को निकालना चाहता हूं, जो कि पाठ "टेक्स्ट स्ट्रिंग" के ब्लॉक को दिखाता है और इसे किसी अन्य फ़ाइल में कॉपी करता है, जबकि यादृच्छिक वर्णों को अनदेखा करता है (कॉपी नहीं किया जाना है)। इसके अलावा मैं 139नई फाइल में नहीं दिखाना चाहता हूं । ऊपर उल्लिखित "टेक्स्ट स्ट्रिंग" कई पैराग्राफ वाले टेक्स्ट के ब्लॉक को इंगित करता है।


मैंने कुछ सोचा। यह कार्य बहुत आसान हो सकता है यदि प्रत्येक 2, 4, 6, आदि .. 139 की घटना को कुछ और द्वारा प्रतिस्थापित किया जाता है, जैसे 391। तब कार्य बहुत सरल होगा।
thewhiteeye

वास्तविक उपयोग क्या है? आपने खुद क्या कोशिश की है? आपको शायद एक लूप की आवश्यकता होगी और वास्तव में, शुरुआत और अंत के लिए अलग-अलग पहचानकर्ता होना सहायक होगा।
सेठ

उपयोग यह है कि पृष्ठ से एकत्रित सभी पाठ मेरे लिए एक प्रकार के मैनुअल के रूप में काम करेंगे। मैं शेल स्क्रिप्टिंग में नया हूं। मैंने egrep
thewhiteeye

उपयोग यह है कि पृष्ठ से एकत्रित सभी पाठ मेरे लिए एक प्रकार के मैनुअल के रूप में काम करेंगे। मैं शेल स्क्रिप्टिंग में नया हूं। मैंने egrep कमांड की कोशिश की जो मुझे इस वेबसाइट से मिली। मैं बस आगे बढ़ना नहीं जानता।
thewhiteeye

superuser.com/questions/763470/… मेरी क्वेरी इस क्वेरी के समान है कि इस तथ्य को छोड़कर कि निकाले जाने वाला डेटा कई पैराग्राफ के रूप में है।
thewhiteeye

जवाबों:


0

एकाधिक पर्ल्स और एस्पेल का उपयोग करने वाला एक-लाइनर (क्रमिक तारों की पहचान करने के लिए):

perl -0777 -ne 'while(m/(?<=139)(.*(\n)*)*(?=139)/g){print "$&\n";}' /path/to/file | \
perl -0777 -pe 's/139\n//g' | \
while read line; \
do if [ "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell clean`" \
!= "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell list`" ]; \
then echo $line; fi; done

यहाँ है कि यह कैसे जाता है:

  • 139 के बीच के ब्लॉक निकाले जाते हैं (यह आखिरी ब्लॉक को बाहर छोड़ देता है)
  • 139 की लाइनें हटा दी गई हैं
  • पंक्तियों को "जबकि किया हुआ" लूप में खिलाया जाता है जिसमें अक्षर वर्णों को शब्दकोश के खिलाफ जांचा जाता है। यदि रेखा में शब्दकोष में कोई शब्द शामिल है, तो पूरी पंक्ति गूँजती है। अन्यथा इसे हटा दिया जाता है।

नोट: उचित एस्पेल शब्दकोश स्थापित किया जाना चाहिए


आपके उत्तर के लिए धन्यवाद सरहट। मुझे यह करने का एक तरीका सूझा। पाठ के खंडों को सौभाग्य से संरेखित किया गया था ताकि थोड़ी छेड़छाड़ ने मुझे हर 2 वें, 4 वें, 6 वें, आदि की जगह लेने की अनुमति दी। , / 391 / p "फ़ाइल >> newfile जिसने वांछित आउटपुट दिया। सभी को फिर से धन्यवाद ... और आप सभी को नए साल की हार्दिक शुभकामनाएं
thewhiteeye

आपकी शुभकामनाओं के लिए धन्यवाद, मेरी ओर से भी वही। मुझे खुशी है कि आपने ऐसा किया।
सेर्वेट केविकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.