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
这里的关键是将您的输入文件与一个流粘贴在一起,该流将输入文件中的每一行都颠倒过来。这为您提供了两个单独的列,您可以进行比较。
我得到了一个 .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
这里的关键是将您的输入文件与一个流粘贴在一起,该流将输入文件中的每一行都颠倒过来。这为您提供了两个单独的列,您可以进行比较。