यहां काम पर हम एक न्यूजलेटर सिस्टम पर काम कर रहे हैं जो हमारे ग्राहक उपयोग कर सकते हैं। एक इंटर्न के रूप में मेरी नौकरियों में से एक पहेली के छोटे टुकड़ों के साथ मदद करने के लिए है। इस मामले में मुझे जो करना है, वह ईमेल सर्वर के लॉग को संदेशों को बाउंस करने के लिए स्कैन करता है और ईमेल जोड़ता है और ईमेल को "खराब ईमेल डेटाबेस" पर बाउंस करने का कारण होता है।मैं एक सूची में एक पाइप से अलग स्ट्रिंग कैसे विभाजित कर सकता हूं?
बुरा ईमेल तालिका में दो कॉलम होते हैं: 'ईमेल' और 'कारण' मैं निम्नलिखित कथन का उपयोग लॉग से जानकारी मिलती है और पर्ल स्क्रिप्ट
grep " 550 " /var/log/exim/main.log | awk '{print $5 "|" $23 " " $24 " " $25 " " $26 " " $27 " " $28 " " $29 " " $30 " " $31 " " $32 " " $33}' | perl /devl/bademails/getbademails.pl
आप sugestions है, तो को भेजने के लिए एक अधिक कुशल अजीब लिपि पर, तो मुझे उनको भी सुनकर खुशी होगी लेकिन मेरा मुख्य फोकस पर्ल स्क्रिप्ट है। पर्ल स्क्रिप्ट के लिए अजीब पाइप "बाउंस के लिए [email protected]|reason"। मैं इन तारों में लेना चाहता हूं, उन्हें विभाजित करें और दो अलग-अलग हिस्सों को डेटाबेस में अपने संबंधित कॉलम में डाल दें। यहां मेरे पास है:
#!usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbpath = "dbi:mysql:database=system;host=localhost:3306";
my $dbh = DBI->connect($dbpath, "root", "******")
or die "Can't open database: $DBI::errstr";
while(<STDIN>) {
my $line = $_;
my @list = # ? this is where i am confused
for (my($i) = 0; $i < 1; $i++)
{
if (defined($list[$i]))
{
my @val = split('|', $list[$i]);
print "Email: $val[0]\n";
print "Reason: $val[1]";
my $sth = $dbh->prepare(qq{INSERT INTO bademails VALUES('$val[0]', '$val[1]')});
$sth->execute();
$sth->finish();
}
}
}
exit 0;
आपको उन सभी grep और awk की आवश्यकता नहीं है। यदि आप /var/log/exim/main.log की सामग्री का केवल एक उदाहरण प्रदान कर सकते हैं तो हम आपको एक पर्ल स्क्रिप्ट बनाने में बेहतर मदद कर सकते हैं, जो सब कुछ grep और awk करता था। – bmdhacks
मुझे लगता है कि पर्ल में पूरी चीज को कोड करना बेहतर होगा। पर्ल से प्रत्येक पंक्ति के लिए कोड को दोबारा बनाने के लिए आपको शायद स्पीड बूस्ट दिखाई देगा। –