Как найти слова с теми же буквами с помощью сценария оболочки

Я хочу записать сценарий, который примет строку текста и должен сказать мне, если какое-либо из слов будет составлено из тех же букв. Вот пример:

How can you listen if you are not silent?

Здесь 'послушайте', и 'тихий' составлены из точно тех же букв с той же частотой.

Какая-либо справка?

0
задан 8 April 2018 в 13:33

2 ответа

Представленный без комментария:

ruby -rset -e '
  readlines.each {|sentence| 
    p sentence
    data = Hash.new {|h,k| h[k] = Set.new}
    sentence.scan(/\w+/).each {|word| data[word.chars.sort] << word }
    p data.each_value.select {|set| set.size > 1}.collect(&:to_a)
  }
' << END
How can you listen if you are not silent?
I saw a tap; it was apt
END
"How can you listen if you are not silent?\n"
[["listen", "silent"]]
"I saw a tap; it was apt\n"
[["saw", "was"], ["tap", "apt"]]
3
ответ дан 30 October 2019 в 03:08

Это перечислит частоту каждого разграниченного пространством набора символов в предложении:

echo 'How can you listen if you are not silent?' \
| tr -cd '[:alpha:][:space:]' \
| tr '[:upper:][:space:]' '[:lower:]\n' \
| while read a; do grep -o .<<<$a | sort | tr -d '\n'; echo; done \
| sort | uniq -c | sort

Вывод:

  1 acn
  1 aer
  1 fi
  1 how
  1 not
  2 eilnst
  2 ouy

Это не очень изящно, и вероятно необходимо использовать что-то еще, чем оболочка.

2
ответ дан 30 October 2019 в 03:08

Другие вопросы по тегам:

Похожие вопросы: