Linux или script подсчет дублированных строк в текстовом файле?

Если у меня есть текстовый файл со следующим коннетом

red apple
green apple
green apple
orange
orange
orange

Есть ли команда Linux или script, которую я могу использовать для получения следующего результата?

1 red apple
2 green apple
3 orange

Ответ 1

Отправьте его через sort (чтобы соединить смежные элементы вместе), затем uniq -c, чтобы дать подсчеты, т.е.:

sort filename | uniq -c

и чтобы получить этот список в отсортированном порядке (по частоте), вы можете

sort filename | uniq -c | sort -nr

Ответ 2

Почти то же самое, что и borribles ', но если вы добавите параметр d в uniq, он будет показывать только дубликаты.

sort filename | uniq -cd | sort -nr

Ответ 3

uniq -c file

и в случае, если файл уже не отсортирован:

sort file | uniq -c

Ответ 4

Попробуйте это

cat myfile.txt| sort| uniq

Ответ 5

Можете ли вы жить с алфавитом, упорядоченным списком:

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
" ...

Будут напечатаны два яблока, разбитые бананом.

Ответ 6

cat <filename> | sort | uniq -c

Ответ 7

Чтобы просто получить счет:

$> 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