BASH在.txt文件中查找回文

时间:2017-10-14 13:10:04

标签: bash palindrome

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

它应该显示,第一列是它出现的次数,第二列是单词,例如。

  

123皮划艇

     

3 bob

     

1爸爸

#!/bin/bash

tmp='mktemp'

awk '{for(x=1;$x;++x)print $x}' "${1}" | 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个字母的单词,标点符号和数字。

然而,我现在正在努力解决如何从中取出回文,我认为临时档案可能就是这样,只是不知道该把它带到哪里。

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

1 个答案:

答案 0 :(得分:2)

# 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 '/^(.)\1+$/d' \
    | tr -s '[[:space:]]' \
    | tr '[[:space:]]' '\n'
}

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

这里的关键是将输入文件粘贴到一个流中,该流使该输入文件中的每一行都反转。这为您提供了两个可以比较的独立列。