2011-06-22 10 views
84

अगर मैं निम्नलिखित conentलिनक्स कमांड या स्क्रिप्ट एक टेक्स्ट फ़ाइल में डुप्लिकेट लाइनों की गिनती?

red apple 
green apple 
green apple 
orange 
orange 
orange 

वहाँ एक लिनक्स कमांड या स्क्रिप्ट है कि मैं निम्नलिखित परिणाम प्राप्त करने के लिए उपयोग कर सकते है साथ एक पाठ फ़ाइल है?

echo "red apple 
> green apple 
> green apple 
> orange 
> orange 
> orange 
> " | sort -u 

:

1 red apple 
2 green apple 
3 orange 

उत्तर

2

आप वर्णमाला के साथ रहती कर सकते हैं, सूची का आदेश दिया?

green apple 
orange 
red apple 

या

sort -u FILE 

-u अद्वितीय के लिए खड़ा है, और विशिष्टता केवल छँटाई के माध्यम से पहुँच जाता है।

एक समाधान जो आदेश को बरकरार रखता है:

echo "red apple 
green apple 
green apple 
orange 
orange 
orange 
" | { old=""; while read line ; do if [[ $line != $old ]]; then echo $line; old=$line; fi ; done } 
red apple 
green apple 
orange 

और, एक फ़ाइल

cat file | { 
old="" 
while read line 
do 
    if [[ $line != $old ]] 
    then 
    echo $line 
    old=$line 
    fi 
done } 

पिछले दो केवल डुप्लिकेट है, जो तुरंत पालन हटाने के साथ - जो अपने उदाहरण के लिए फिट बैठता है।

echo "red apple 
green apple 
lila banana 
green apple 
" ... 

केले से विभाजित दो सेब प्रिंट करेगा। (आसन्न आइटम एक साथ रखा है

sort file | uniq -c

6

uniq -c file

और मामले में फ़ाइल पहले से पृथक नहीं किया जा रहा है) तो uniq -c देने के लिए मायने रखता है, अर्थात्:

sort filename | uniq -c 

और क्रमबद्ध क्रम में है कि सूची प्राप्त करने के (आवृत्ति) के द्वारा आप कर सकते हैं

sort filename | uniq -c | sort -nr 
3

प्रयास करें इस

cat myfile.txt| sort| uniq 
+0

-c या -d flags के बिना, uniq गैर-डुप्लीकेट से डुप्लिकेट लाइनों को अलग नहीं करता है, या क्या मुझे कुछ याद आ रही है? – drevicko

0

सिर्फ एक संख्या प्राप्त करने के लिए:

$> egrep -o '\w+' fruits.txt | sort | uniq -c 

     3 apple 
     2 green 
     1 oragen 
     2 orange 
     1 red 

प्राप्त करने के लिए एक क्रमबद्ध गिनती:

$> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1 
     1 oragen 
     1 red 
     2 green 
     2 orange 
     3 apple 

संपादित करें

आह, यह शब्द सीमाओं के साथ नहीं था, मेरा बुरा।यहाँ पूर्ण लाइनों के लिए उपयोग करने के लिए आदेश दिया गया है:

$> cat fruits.txt | sort | uniq -c | sort -nk1 
     1 oragen 
     1 red apple 
     2 green apple 
     2 orange 
36

लगभग borribles रूप में एक ही 'लेकिन अगर आप uniq को d परम जोड़ने यह केवल डुप्लिकेट को दर्शाता है।

sort filename | uniq -cd | sort -nr 
+1

छोटे '-d' नोट के लिए अंगूठे ऊपर। – sepehr

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