gpt4 book ai didi

linux - 在sed中按字母顺序对变量进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:47 24 4
gpt4 key购买 nike

简而言之,我有一个 bash 脚本,它可以找到字典中所有 5 个字母的单词和一个重复的字母。我正在使用 sed 打印出重复的字母和不重复的字母。我必须按字母顺序对不重复的字母进行排序,但我不太确定如何

这是我的 sed;

sed 's/\(.*\)\(.\)\(.*\)\2\(.*\)/\1\2\3\2\4  \2   \1\3\4 /'

所以我需要通过将\1\3\4 输送到读取循环中来对它们进行排序

更新

grep '^[a-z][a-z][a-z][a-z][a-z]$' /usr/share/dict/words | 
grep '.*\(.\).*\1.*' |
grep -v '.*\(.\).*\1.*\1.*' |
grep -v '.*\(.\).*\(.\).*\1.*\2.*\1.*\2.*' |
grep -v '.*\(.\).*\(.\).*\1.*\2.*\2.*\1.*' |
grep -v '.*\(.\).*\(.\).*\1.*\1.*\2.*\2.*' |
sed 's/\(.*\)\(.\)\(.*\)\2\(.*\)/\1\2\3\2\4 \2 \1\3\4/' |
while read word dup nondup
do sort -$nondup
front=$[nondup:1]
middle=$[nondup:2]
back=$[nondup:3]

echo $word $dup $front$middle$back
done

最佳答案

对于 5 个字母单词的示例字典:

$ cat file
timey
terra
debby
ovolt
spell

现在,使用您的 sed 命令,让我们按非重复字母对输出进行排序:

$ sed 's/\(.*\)\(.\)\(.*\)\2\(.*\)/\1\2\3\2\4  \2   \1\3\4 /' file | sort -k3
timey
debby b dey
spell l spe
terra r tea
ovolt o vlt

sort -k3 对第三列进行排序。

上面但也按字母顺序对非重复出现的字母进行排序

此解决方案添加了一个 shell while 循环,以便对非重复出现的字母进行排序:

sed 's/\(.*\)\(.\)\(.*\)\2\(.*\)/\1\2\3\2\4  \2   \1\3\4 /' file | while read word rep non
do
non=$(echo "$non" | grep -o . | sort |tr -d "\n")
echo "$word $rep $non"
done | sort -k3

在相同的输入上,这会产生输出:

timey  
terra r aet
debby b dey
spell l eps
ovolt o ltv

仅适用于教师的原始方法

如果我没理解错的话,你的老师想要这样的东西:

sed 's/\(.*\)\(.\)\(.*\)\2\(.*\)/\1\2\3\2\4  \2   \1\3\4 /' file | 
while read word rep non
do
[ "$non" ] || continue # skip any word that lacks a repeating letter
front=${non:0:1}
middle=${non:1:1}
back=${non:2:1}
if [[ "$front" < "$middle" ]] && [[ "$front" < "$back" ]]
then
[[ "$middle" < "$back" ]] && non=$front$middle$back || non=$front$back$middle
elif [[ "$middle" < "$front" ]] && [[ "$middle" < "$back" ]]
then
[[ "$front" < "$back" ]] && non=$middle$front$back || non=$middle$back$front
elif [[ "$back" < "$front" ]] && [[ "$back" < "$middle" ]]
then
[[ "$front" < "$middle" ]] && non=$back$front$middle || non=$back$middle$front
else
echo "ERROR"
fi
echo "$word $rep $non"
done | sort -k3

此方法需要 bash

关于linux - 在sed中按字母顺序对变量进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com