मैं उपयोगकर्ता नाम और आईपी लाने की कोशिश कर रहा हूं जहां से उन्होंने मेरे सिस्टम पर लॉग इन किया था।

मैंने निम्न आदेश का उपयोग किया:

last -i | grep 'Jan 12' | cut -f1,3

लेकिन मुझे परिणाम के रूप में पूरी लाइन मिल रही है।

लेकिन जब मैं awk का उपयोग करता हूं:

last -i | grep 'Jan 12' | awk '{print $1, $3}'

मुझे सही परिणाम मिल रहा है।

कट कमांड के मामले में गलत आउटपुट क्यों?

किसी भी मदद को बहुत सराहा जाएगा।

1
Bhawan 12 जिंदा 2018, 14:23

2 जवाब

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

cut का डिफ़ॉल्ट डिलीमीटर एक टैब है, जबकि awk में डिफ़ॉल्ट इनपुट फ़ील्ड सेपरेटर कोई भी व्हाइटस्पेस यानी स्पेस या टैब है।

cut में समान व्यवहार प्राप्त करने के लिए, आपको इसे बनाने के लिए -d ' ' को cut में जोड़ना होगा:

last -i | grep 'Jan 12' | tr -s ' ' | cut -d ' ' -f1,3

tr -s ' ' को एक ही स्थान में एकाधिक रिक्त स्थान को निचोड़ने की आवश्यकता है।

हालांकि awk का उपयोग करने से आप grep को पूरी तरह से छोड़ सकते हैं और उपयोग कर सकते हैं:

last -i | awk '/Jan 12/{print $1, $3}'
4
anubhava 12 जिंदा 2018, 14:37

cut में, डिफ़ॉल्ट सीमांकक [Tab] है। साथ ही -d कुंजी के साथ आप केवल एक वर्ण को सीमांकक के रूप में निर्दिष्ट कर सकते हैं। last आउटपुट में एक पंक्ति में 8 स्पेस होते हैं।

तो, आपके उदाहरण के अनुसार awk का उपयोग करने का सबसे अच्छा तरीका है।

खराब, लेकिन कट के साथ काम करने वाला समाधान:

last | grep 'Jun 23' | sed 's/\s\s*/ /g' | cut -d' ' -f1,3
0
Viktor Khilin 12 जिंदा 2018, 14:31