BASH在.txt文件中查找回文

BASH在.txt文件中查找回文,bash,palindrome,Bash,Palindrome,我得到了一个.txt文件,其中我们必须找到文本中的所有回文(必须至少有3个字母,它们不能是相同的字母,例如AAA) 它应该显示,第一列是它出现的次数,第二列是单词,例如 123皮艇 3鲍勃 1爸爸 这将按其应做的方式输出文件,忽略大小写、少于3个字母的单词、标点符号和数字 然而,我现在正在琢磨如何从中提取回文,我认为临时文件可能是一种方法,只是不知道该把它放在哪里 非常感谢您的帮助或指导。#根据您的需要修改此内容;它应该在stdin上接受您的输入,并且每个输入返回一个单词 # modify th

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

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

123皮艇

3鲍勃

1爸爸

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

然而,我现在正在琢磨如何从中提取回文,我认为临时文件可能是一种方法,只是不知道该把它放在哪里

非常感谢您的帮助或指导。

#根据您的需要修改此内容;它应该在stdin上接受您的输入,并且每个输入返回一个单词
# 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
#如果使用相同的输入多次调用,则以相同的顺序在标准输出上的行。 预处理(){ tr-d'[:punct:[:digit:@]'\ |sed-E-E'/^(.)\1+$/d'\ |tr-s'[:空格:]'\ |tr'[:space:][]''\n } 粘贴
#根据您的需要进行修改;它应该在stdin上接受您的输入,并且每个输入返回一个单词
#如果使用相同的输入多次调用,则以相同的顺序在标准输出上的行。
预处理(){
tr-d'[:punct:[:digit:@]'\
|sed-E-E'/^(.)\1+$/d'\
|tr-s'[:空格:]'\
|tr'[:space:][]''\n
}

粘贴
awk
可以执行您正在使用的所有操作
tr
sed
,具体请参见
gsub()
函数。当一个人可以做这项工作时,在一大堆单独的过程之间传输内容是没有意义的。关于重复标志的可能重复:这是原始帖子,链接的问题是重复的,但是由于链接的问题有更好的答案,关闭此问题并打开另一个问题似乎更好。此问题与课程作业(由我设置)有关,发布作业的部分解决方案并在堆栈交换上寻求解决方案违反了剽窃和共谋条例。如果您在代码运行方面遇到问题,请向我或教学助理寻求帮助。是否可以删除此问题?@DikranMarsupial,一般情况下删除一个问题会让10000个或更多代表的用户看到它。如果你想更彻底地删除它,那就需要版主的介入。(这就是说,这里的一般政策是,如果问题或其答案可能对其他人有帮助,我们不支持根据海报的要求删除——如果有人作弊/剽窃,这项政策也有助于确保他们被抓住,而不是在他们有答案后立即删除他们的问题,从而不被发现,除非一个10k+帐户用于扫描此类行为)。
awk
可以执行您正在使用的所有操作
tr
sed
,具体请参见
gsub()
函数。当一个人可以做这项工作时,在一大堆单独的过程之间传输内容是没有意义的。关于重复标志的可能重复:这是原始帖子,链接的问题是重复的,但是由于链接的问题有更好的答案,关闭此问题并打开另一个问题似乎更好。此问题与课程作业(由我设置)有关,发布作业的部分解决方案并在堆栈交换上寻求解决方案违反了剽窃和共谋条例。如果您在代码运行方面遇到问题,请向我或教学助理寻求帮助。是否可以删除此问题?@DikranMarsupial,一般情况下删除一个问题会让10000个或更多代表的用户看到它。如果你想更彻底地删除它,那就需要版主的介入。(这就是说,这里的一般政策是,如果问题或其答案可能对其他人有帮助,我们不支持根据海报的要求删除——如果有人作弊/剽窃,这项政策也有助于确保他们被抓住,而不是在他们有答案后立即删除他们的问题,从而不被发现,除非一个10k+帐户用于扫描此类行为)。谢谢,既然我得到了一堆不是回文的随机单词,这将如何放置?你的意思是在输出中吗?我希望看到相关的输入行来重现它。同样,我需要看到输入。适合我。我输入的文件(包含单词)是什么?或者我的bash文件我已经对代码做了一些修改,但是因为我不能重现你的问题(我只得到回文作为输出),我当然不能声称他们解决了它。谢谢你,既然我得到了一堆不是回文的随机单词,这将如何放置?你是说在输出中吗?我希望看到相关的输入行来重现它。同样,我需要看到输入。适合我。我输入的文件(包含单词)是什么?或者我的bash文件我已经对代码做了一些修改,但是由于我不能在第一时间重现您的问题(我只得到回文作为输出),我当然不能声称他们解决了这个问题。
# 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