2011-08-05 12 views
12

मैं अजगर में ऐसा कर सकते हैं, लेकिन मैं सोच रहा था कि मैं इसएक डेटा फ़ाइल में अद्वितीय मानों को ढूँढने

name1 text text 123432re text 
name2 text text 12344qp text 
name3 text text 134234ts text 

मैं सभी को खोजने के लिए चाहते हैं की तरह एक फ़ाइल है कि अगर मैं लिनक्स

में ऐसा कर सकता है किसी विशेष उपयोगकर्ता नाम से तीसरे कॉलम में विभिन्न प्रकार के मानों का नाम है 1.

grep name1 फ़ाइल नाम मुझे सभी लाइनें देता है, लेकिन सभी अलग-अलग प्रकार के मूल्यों को सूचीबद्ध करने के लिए कुछ तरीका होना चाहिए? तो डेटा का सिर्फ चौथे स्तंभ हो और केवल अनन्य मान दिखाने (मैं नहीं है एक ही उपयोगकर्ता नाम डुप्लिकेट मानों को प्रदर्शित करना चाहते)

उत्तर

30
grep name1 filename | cut -d ' ' -f 4 | sort -u 

यह सभी लाइनों name1 है कि मिल जाएगा।

+1

यदि आपके पास किसी अन्य फ़ील्ड में 'name1' है या' name1foo 'नाम का उपयोगकर्ता है, तो समाधान उन परिणामों को दे सकता है जिन्हें आप नहीं चाहते हैं। मैं इससे बचने के लिए '^^name1" '(नाम 1 के बाद एक जगह के साथ) पर grep होगा। – jfg956

7

आप कर सकते हैं प्रकार 4-वें कुंजी पर केवल देखने के लिए, और फिर केवल अद्वितीय कुंजी के साथ रिकॉर्ड के लिए पूछना है:

grep name1 | sort -k4 -u 
1

एक सब-इन-वन awk समाधान के रूप में:

awk '$1 == "name1" && ! seen[$1" "$4]++ {print $4}' filename 
4

मैं का उपयोग कर cat

फ़ाइल शामिल करने की कोशिश की: (यहाँ फ़ाइल है foo.sh आप कर सकते हैं यहाँ इनपुट किसी भी फ़ाइल नाम)

+०१२३५१६४१०

$cat foo.sh

tar 
world 
class 
zip 
zip 
zip 
python 
jin 
jin 
doo 
doo 

uniq प्रत्येक शब्द मिल जाएगा केवल एक बार

$ cat foo.sh | sort | uniq

class 
doo 
jin 
python 
tar 
world 
zip 

uniq -u शब्द मिल जाएगा फ़ाइल

में केवल एक बार दिखाई दिया

$ cat foo.sh | sort | uniq -u

class 
python 
tar 
world 

uniq -d केवल दो प्रतियों शब्द मिलता है और उन्हें एक बार

$ cat foo.sh | sort | uniq -d

doo 
jin 
zip 
0

मेरी राय में प्रिंट होगा, आप क्षेत्र का चयन करने की जरूरत है जिससे आपको अद्वितीय मूल्यों की आवश्यकता होती है। मैं आईपीटीबल्स लॉग से अद्वितीय स्रोत आईपी पुनर्प्राप्त करने की कोशिश कर रहा था।

SRC=192.168.10.225 

SRC=192.168.10.29 

SRC=192.168.20.125 

SRC=192.168.20.147 

SRC=192.168.20.155 

SRC=192.168.20.183 

SRC=192.168.20.194 

तो, सबसे अच्छा विचार पहले क्षेत्र चयन करें और फिर अद्वितीय डेटा को फ़िल्टर करना है:

cat /var/log/iptables.log | grep "May 5" | awk '{print $11}' | sort -u 

यहाँ उपरोक्त आदेश का उत्पादन होता है।

+0

दोनों 'बिल्ली' और 'grep | अजीब 'बेकार हैं [http://www.iki.fi/era/unix/award.html)। कोई भी बिल्ली बिल्ली | grep बी | अजीब '{सी}' 'बेहतर 'awk'/b/{c} 'a' के रूप में बेहतर है – tripleee

संबंधित मुद्दे