grep "कुछ" anyfiles.log> afile.csv, इनपुट पथ को प्रिंट करने और CS% फ़ाइल में नाम दर्ज करने की आवश्यकता नहीं है


9

मेरे पास कुछ लॉग फाइलें हैं, उनके पास 30000 से अधिक लाइनें हैं। मुझे "डोमेन" नाम खोजने और CSV फ़ाइल में सहेजने की आवश्यकता है, लेकिन सहेजने के बाद, CSV फ़ाइल में किसी भी लाइन को CSV फ़ाइल की बहुत लाइन की शुरुआत में इनपुट फ़ाइलों का पथ और फ़ाइल नाम जोड़ा गया है। अगर मुझे CSV फ़ाइलों के लिए पथ और इनपुट फ़ाइल नाम जोड़ने की आवश्यकता नहीं है तो मैं कैसे कर सकता हूं?

उदाहरण:

Input
#cat /home/log/any.log

any things..domain, anything
any things..domain, anything
any things..domain, anything


grep "domain" /home/logs/any.log > newfile.csv

Output:
#cat newfile.csv
/home/logs/any.log:domain
/home/logs/any.log:domain
/home/logs/any.log:domain


#----My requirement output is:

cat newfile.csv
domain
domain
domain

अगर किसी को पता है तो कृपया मेरी मदद करें

जवाबों:


21

--no-filenameGrep के लिए विकल्प का उपयोग करें ।

आउटपुट पर फ़ाइल नामों के प्रीफ़िक्सिंग को दबाएं। यह डिफ़ॉल्ट है जब खोज करने के लिए केवल एक फ़ाइल (या केवल मानक इनपुट) है।

grep --no-filename "domain" 

संदर्भ: ग्रेप मैनुअल


1

man cutविवरण के लिए देखें, लेकिन संक्षिप्त उत्तर है grep "domain" /home/logs/*.log | cut -d: -f2 >newfile.csv

या देखें man grepऔर करेंgrep -o "domain" /home/logs/*.log >newfile.csv

पुनश्च: अगर grep "domain" /home/logs/any.logआपके उदाहरण में कमांड लाइन पर केवल एक फ़ाइल है, तो grep फ़ाइल नाम का उत्पादन नहीं करता है । यदि आप फ़ाइलनाम को आउटपुट करने के लिए बाध्य करना चाहते हैं, grep "domain" /home/logs/any.log /dev/nullतो यह ट्रिक करेगा।


man cut... दर्द होता है।
मैट फ्लेचर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.