我收到了一个.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个字母的单词,标点符号和数字。
然而,我现在正在努力解决如何从中取出回文,我认为临时档案可能就是这样,只是不知道该把它带到哪里。
非常感谢任何帮助或指导。
答案 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
这里的关键是将输入文件粘贴到一个流中,该流使该输入文件中的每一行都反转。这为您提供了两个可以比较的独立列。