답변:
이 시도
cat myfile.txt| sort| uniq
알파벳 순서로 된 목록으로 살 수 있습니까?
echo "red apple
> green apple
> green apple
> orange
> orange
> orange
> " | sort -u
?
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
" ...
바나나로 분할 된 두 개의 사과를 인쇄합니다.
카운트를 얻으려면 :
$> 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
다음은 Counter 유형을 사용하는 간단한 파이썬 스크립트 입니다. 이점은 기본적으로 제로 메모리를 사용하여 파일을 정렬 할 필요가 없다는 것입니다.
import collections
import fileinput
import json
print(json.dumps(collections.Counter(map(str.strip, fileinput.input())), indent=2))
산출:
$ cat filename | python3 script.py
{
"red apple": 1,
"green apple": 2,
"orange": 3
}
또는 간단한 한 줄짜리를 사용할 수 있습니다.
$ cat filename | python3 -c 'print(__import__("json").dumps(__import__("collections").Counter(map(str.strip, __import__("fileinput").input())), indent=2))'
-d
메모에 엄지 손가락 .