मैं बैश निंजा नहीं हूं और मेरे पास नीचे की तरह लाइनों वाली एक फाइल है:

timestamp1 value1 value2 value3 username host

मैं सभी मान 3 और मान 2 मुद्रित करना चाहता हूं जो हर बार अलग होगा जहां मेजबान एक्स बार कहने के लिए समान था। मुझे पता है कि प्रति मेजबान कैसे grep करना है और कॉलम को जगाना है, हालांकि मुझे नहीं पता कि एक चर के लिए गिनती कैसे सेट करें?

तो उदाहरण के लिए - यदि होस्ट फ़ाइल पर 5 बार दिखाई देता है तो मैं इन 5 पंक्तियों को प्रिंट करना चाहता हूं। लेकिन यहाँ बात यह है कि मैं मेजबान को नहीं जानता इसलिए मुझे इसे एक चर में निर्दिष्ट करने और किसी तरह इसे गिनने की आवश्यकता है?

0
user3124171 16 मार्च 2017, 19:28
1
कृपया इनपुट का एक न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण बनाएं, आपके प्रयास किए गए कोड, और वास्तविक और अपेक्षित आउटपुट।
 – 
l0b0
16 मार्च 2017, 19:36
यहां वह जोड़ें जो आप पहले से ही जानते हैं (जैसा कि आपने कहा था)। हम कैसे जारी रखने में मदद कर सकते हैं।
 – 
jm666
16 मार्च 2017, 19:54
मैंने जो उदाहरण प्रदान किया है वह ठीक है जिसका अर्थ है कि प्रारूप बिल्कुल इस तरह है। मैं जो देखना चाहता हूं वह सभी लाइनें हैं जिनमें एक होस्ट होता है जो फ़ाइल में एक्स से अधिक दिखाई देता है (5 बार कहें)।
 – 
user3124171
16 मार्च 2017, 20:16

1 उत्तर

सबसे बढ़िया उत्तर

वन-लाइनर समाधान

मान लें कि आपकी फ़ाइल का नाम lst था, ये रहा ऑनलाइनर:

grep -Ff <(awk '{print $6}' lst | sort | uniq -c | awk '$1 == 5 {print $2}') lst

क्या होता है?

  • फ़ाइल से सभी होस्टनाम निकालें
  • प्रत्येक होस्टनाम के लिए, घटनाओं की संख्या गिनें
  • केवल वही होस्टनाम प्रिंट करें जो ठीक 5 बार दिखाई देते हैं
  • फ़िल्टर किए गए होस्टनामों के लिए फ़ाइल को ग्रेप करें

नोट:

  • होस्टनाम अन्य क्षेत्रों के अंदर प्रकट नहीं होने चाहिए (इससे झूठी सकारात्मकता हो सकती है)।
  • आउटपुट को मूल फ़ाइल के रूप में ऑर्डर किया गया है (होस्टनाम के अनुसार सॉर्ट नहीं किया जा सकता है)। हालाँकि आप कमांड के अंत में एक | sort जोड़ सकते हैं।
1
Socowi 16 मार्च 2017, 21:25