सवाल एक पैटर्न के लिए grepping जबकि डुप्लिकेट पिड्स से बचें


मैंने एक शेल स्क्रिप्ट लिखी है जो अपडेटिंग लॉग पढ़ता है और लूप के दौरान ओओएम का उपयोग करते समय एक ईमेल अधिसूचना भेजता है।

मैं ओओएम त्रुटियों के लिए ईमेल अधिसूचना प्राप्त करने में सक्षम हूं लेकिन हर बार ईमेल के लिए एक डुप्लिकेट पीआईडी ​​उत्पन्न हो रहा है जो एक विशाल संख्या बना रहा है। डुप्लिकेट पिड्स की जबकि मैं उस विशेष प्रक्रिया / व्यवस्थापक सर्वर (वेबलॉगिक) के लिए grepping हूँ। पीएफबी मेरी लिपि, क्या कोई तरीका है कि मैं डुप्लिकेट पीआईडी ​​से बच सकता हूं और एक grep करते समय केवल माता-पिता पीआईडी ​​प्राप्त कर सकता हूं।

#!/bin/sh
# Script to read the updating log file and send mail for any errors : LogCheck.sh
# SET VARIABLES
logfile=BEA_HOME/SERVERS/Admin.log
pattern="java.lang.OutOfMemoryError: Java heap space" 

#Read each line as it gets updating to the log file
tail -fn0 $logfile | while read line ; do 

    #check each line for our pattern
    echo "$line" | grep -i "$pattern"

    #Perform the below action if a line matches with our pattern
    if [ $? = 0 ]; 

    then
        #Send an email 
        echo "Found an error: $line" | mailx -s "please check the error" emailID 
    fi

done

4
2017-07-13 06:35


मूल




जवाब:


आप उपयोग कर सकते हैं uniq या sort -u:

echo "$line" | grep -i "$pattern" | uniq

4
2017-07-13 07:17



हाय, सुझाव के लिए धन्यवाद। मैंने इन विकल्पों का उपयोग करने की कोशिश की लेकिन जब मैं या तो यूनिक या सॉर्ट-यू का उपयोग करता हूं, तो मुझे संदेश "java.lang.OutOfMemoryError: Java heap space" संदेश के लिए ईमेल अधिसूचना प्राप्त नहीं हो रही है, अन्य संदेशों के लिए अधिसूचनाएं प्राप्त कर रही हैं। इसके अलावा जब मैं एक grep i.e ps -ef | grep AdminServer - पैरेंट पिड के साथ यह नीचे कुछ अन्य पीआईडी ​​का उत्पादन कर रहा है .. - user174783


ps wp PID|grep PID

आप इसे grep के बिना करते हैं - आप grep के साथ पाएंगे आप हेडर को हटा दें ..


0
2017-08-23 22:54