BASH 在 .txt 文件中查找回文

BASH Finding palindromes in a .txt file

我得到了一个 .txt 文件,我们必须在其中找到文本中的所有回文(必须至少有 3 个字母,并且它们不能是相同的字母,例如 AAA)

它应该显示为第一列是它出现的次数,第二列是这个词,例如

123 kayak

3 bob

1 dad

#!/bin/bash

tmp='mktemp'

awk '{for(x=1;$x;++x)print $x}' "" | tr -d [[:punct:]] | tr -s [:space:] | sed -e 's/@//g' -e 's/[0-9]*//g'| sed -r '/^.{,2}$/d' | sort | uniq -c -i > tmp1

这将按应有的方式输出文件,忽略大小写、少于 3 个字母的单词、标点符号和数字。

但是我现在对如何从中提取回文感到困惑,我认为临时文件可能是一种方式,只是不知道该把它放在哪里。

非常感谢任何帮助或指导。

# modify this to your needs; it should take your input on stdin, and return one word per
# line on stdout, in the same order if called more than once with the same input.
preprocess() {
  tr -d '[[:punct:][:digit:]@]' \
    | sed -E -e '/^(.)+$/d' \
    | tr -s '[[:space:]]' \
    | tr '[[:space:]]' '\n'
}

paste <(preprocess <"") <(preprocess <"" | rev) \
  | awk ' ==  && (length() >= 3) { print  }' \
  | sort | uniq -c

这里的关键是将您的输入文件与一个流粘贴在一起,该流将输入文件中的每一行都颠倒过来。这为您提供了两个单独的列,您可以进行比较。