Linux команда для извлечения уникальных слов и подсчета вместе со знаками препинания - PullRequest
3 голосов
/ 03 февраля 2020
tr -c '[:alnum:]' '[\n*]' < 4300-0.txt | sort | uniq -c | sort -nr | head 

Следующая команда извлекает уникальные слова вместе со счетчиком. Я хотел бы получить знаки препинания вместе с уникальным количеством слов.

Как это сделать?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2020

Вы можете разделить ввод с помощью tee и извлечь знаки препинания и alnum по отдельности.

echo "Helo, world!" |
{ 
    tee >(tr -c '[:alnum:]' '\n' >&3) |
    tr -c '[:punct:]' '\n'
} 3>&1 |
sed '/^$/d' |
sort | uniq -c | sort -nr | head

должен вывести:

  1 world
  1 Helo
  1 !
  1 ,

Короткий сценарий sed также работает :

echo "Helo, world!
OK!" |
sed '
    s/\([[:alnum:]]\+\)\([^[:alnum:]]\)/\1\n\2/g
    s/\([[:punct:]]\+\)\([^[:punct:]]\)/\1\n\2/g
    s/[^[:punct:][:alnum:]]/\n/g
' |
sed '/^$/d' |
sort | uniq -c | sort -nr | head

должен вывести:

  2 !
  1 world
  1 OK
  1 Helo
  1 ,
1 голос
/ 03 февраля 2020

Вы можете использовать [:punct:] для получения знаков препинания

И вы можете запустить:

tr -c '[:alnum:][:punct:]' '[\n*]' < 4300-0.txt | sort | uniq -c | sort -nr | head

, он также распечатает знаки препинания.

Например: если в вашем текстовом файле есть

aaa,
aaa

, то результат будет:

1 aaa
1 aaa,
...